1. 程式人生 > >Cris 複習Python日記(四):Python 資料結構之序列和列表

Cris 複習Python日記(四):Python 資料結構之序列和列表

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']