Cris 複習Python日記(四):Python 資料結構之序列和列表
阿新 • • 發佈:2018-12-16
1. 簡單認識序列和列表
# 序列
# 序列是Python 中最基本的資料結構,用於儲存一組有序的資料,所有資料都在序列中擁有一個唯一索引,並且按照元素新增的順序來指定序列
# 序列的分類
# 1. 可變序列(序列中的元素可以改變):list
# 2. 不可變序列(序列中的元素不可改變):字串(str);元祖(tuple)
# 列表的切片和通用操作可以用於所有序列型別
# 建立列表,直接通過[]即可建立一個空列表
my_list = []
print(my_list, type(my_list)) # [] <class 'list'>
# 列表中的一個個資料,一般都稱為一個個元素
# 可以在建立列表的時候,直接指定元素,和 java 的 ArrayList 很類似
my_list = [1, 2, 3]
print(my_list) # [1, 2, 3]
# 列表中可以儲存任何型別的資料(和 java 嚴格的資料型別規定不同)
my_list = [1, 'cris', True, None, [123, 321], print]
# [1, 'cris', True, None, [123, 321], <built-in function print>]
print(my_list)
# 類表中的資料插入都是有順序的,取資料又是根據索引取,和java 的陣列一樣
print(my_list[0]) # 1
# 可以使用 len()函式獲取列表的元素個數
print(len(my_list)) # 6
2. 序列的通用操作
players = ['james', 'curry', 'harden', 'durant', 'rose']
#
# + 和 *
# + 可以將別表拼接,不同列表的元素可以重複
nums = [1, 2, 3] + [3, 4, 5]
print(nums) # [1, 2, 3, 3, 4, 5]
# * 可以對列表進行復制,類似於字串
names = ['cris', 'james'] * 2
print(names) # ['cris', 'james', 'cris', 'james']
# in 和 not in 可以用來檢查元素存在/不存在 列表中
print('davis' in players) # False
print('davis' not in players) # True
# len()用於獲取列表長度
# max 和 min 可以用來最大和最小值,數字比較值,字串比較 Unicode 編碼
print(max(nums)) # 5
print(min(nums)) # 1
# 方法和函式基本一致,但是方法需要通過物件.方法名(引數) 來呼叫,所以方法其實就是
# 和物件關係緊密的函式
# index(x,[start],[end]) 預設用於獲取指定元素 x 第一次出現的索引
print(players.index('harden')) # 2
# 從索引為3 的元素開始查詢指定元素的索引,結束索引為4,如果在這個範圍內沒有找到,報錯
# print(players.index('harden', 3, 4))
# print(players.index('cris')) # 不存在報錯
# count(x) 用於獲取指定元素 x 出現的次數
print(players.count('harden')) # 1
print(players.count('cris')) # 0
3. 序列的切片(列表為例)
# 列表的切片:從現有列表獲取子列表
players = ['james', 'curry', 'harden', 'durant', 'rose']
players1 = players[1:4] # ['cris', True, None]
print(players1)
# 索引可以是負數,表示倒數向前獲取元素,-1 表示倒數第一個,依次類推
players2 = players[-1]
print(players2)
# 如果想要獲取列表中的前兩個資料:列表中元素的索引都是從0開始,切片範圍留頭不留尾
print(players[0:2]) # 包括索引為0和1的元素,但是不包括2
print(players) # ['james', 'curry', 'harden', 'durant', 'rose']
# 切片總會返回新的列表,對原列表沒有任何影響,除非對原引用重新賦值
# 如果切片的範圍沒有結束位置,預設擷取到最後一個元素
print(players[0:]) # ['james', 'curry', 'harden', 'durant', 'rose']
# 如果切片的範圍沒有啟示位置,預設從第一個元素開始切片
print(players[:3]) # ['james', 'curry', 'harden']
# 如果開始位置和結束位置都省略,相當於複製了一遍原列表
print(players[:]) # ['james', 'curry', 'harden', 'durant', 'rose']
# 可以加入步長引數,預設為1,這裡設定為2,表示每隔兩個切一個,步長如果為0,則報錯
# 步長如果設定為負數,如-1,則從列表的後面倒著取
print(players[::2]) # ['james', 'harden', 'rose']
print(players[::-1]) # ['rose', 'durant', 'harden', 'curry', 'james']
# 以下這種情況切出來為 [],因為列表的順序預設從開頭往末尾切片(或者理解為從左往右)
print(players[-2:-4]) # []
# 如果想要倒著切片(從右往左),那就需要設定步長為負數了
print(players[-2:-4:-1]) # ['durant', 'harden']
print(players[-4:-2]) # ['curry', 'harden']