List 基本概念:
清單是Python中的一種有序、可變的集合資料類型,可以儲存不同類型的元素
1. 建立list
1 2 3 4 5 |
# 空 list,使用方括號來建立 empty_list = [] # 初始化一個具有不同類型元素的list my_list = [1, 2, 3, 'a', 'b', 'c'] |
2. 存取 list 元素
使用索引(index)方式來存取,索引初始值為0,最大值為該 list長度 – 1
使用負數索引則是由 -1 開始至 -1 – 長度 + 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 現有以下 list test_list = [1, 2, 3, 4, 1] # 此list長度為5,索引為 0~4,取出超過範圍的索引會發生 IndexError 異常 print(test_list[0]) # 1 print(test_list[5]) # IndexError: list index out of range # 快速取出最後一個元素,使用負數索引 print(test_list[-1]) # 1 # index(x[, start[, end]) # 返回第一個值為 x 的元素的索引,可選參數 start 和 end 用於指定搜索範圍 print(test_list.index(1)) # 0 print(test_list.index(1, 1)) # 4 從索引1開始尋找值為1的元素索引值 |
3. 列表切片
切片操作是一種強大且靈活的功能,可以輕鬆地從列表中提取子列表或進行其他操作。
切片操作使用 [start:stop:step]
的語法
PS:
1. 切片操作不會修改原始列表,而是返回一個新的列表(除非你直接對切片賦值)。
2. 如果索引超出範圍,Python 不會報錯,而是會自動調整為有效範圍。
3. 切片操作的時間複雜度為 O(k),其中 k 是切片後的列表長度。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# list[start:stop:step] # start: 起始索引(包含) # stop: 結束索引(不包含) # step: 步長(可選,預設為 1) my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 提取索引 2 到 5 的元素(不包含索引 5) sub_list = my_list[2:5] print(sub_list) # [2, 3, 4] # 從頭開始提取 # 如果省略 start,則從清單的開頭開始 sub_list = my_list[:4] # 等價於 my_list[0:4] print(sub_list) # [0, 1, 2, 3] # 提取到結尾 # 如果省略 stop,則提取到列表的結尾 sub_list = my_list[6:] # 從索引 6 到結尾 print(sub_list) # 輸出: [6, 7, 8, 9] # 使用負索引 # 負索引表示從清單的末尾開始計算 sub_list = my_list[-3:] # 擷取最後 3 個元素 print(sub_list) # [7, 8, 9] # 使用步長(step) # step 參數可以控制提取元素的間隔 sub_list = my_list[::2] # 從頭到尾,每隔一個元素擷取 print(sub_list) # [0, 2, 4, 6, 8] # 如果 step 為負數,則從後往前提取 sub_list = my_list[::-1] # 反轉列表 print(sub_list) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] # 指定範圍並使用步長 sub_list = my_list[1:8:2] # 從索引 1 到 8,每隔一個元素提取 print(sub_list) # [1, 3, 5, 7] # 切片高階用法 # 修改清單中的部分元素 my_list[2:5] = [10, 11, 12] # 將索引 2 到 5 的元素替換為 [10, 11, 12] print(my_list) # [0, 1, 10, 11, 12, 5, 6, 7, 8, 9] # 刪除部分元素 # 將切片賦值為空列表,可以刪除部分元素 my_list[2:5] = [] # 刪除索引 2 到 5 的元素 print(my_list) # [0, 1, 5, 6, 7, 8, 9] # 插入元素 my_list[2:2] = [20, 21, 22] # 在索引 2 的位置插入 [20, 21, 22] print(my_list) # [0, 1, 20, 21, 22, 2, 3, 4, 5, 6, 7, 8, 9] # 複製 my_list[2:2] = [20, 21, 22] # 在索引 2 的位置插入 [20, 21, 22] print(my_list) # [0, 1, 20, 21, 22, 2, 3, 4, 5, 6, 7, 8, 9] |
4. 修改列表 (增刪改)
append, insert, remove, pop, del
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# 更新修改元素 my_list = [1, 2, 3] my_list[0] = 10 print(my_list) # [10, 2, 3] # 新增元素 # append、extend(iterable) my_list.append(15) print(my_list) # [10, 2, 3, 15] my_list.extend([20, 30]) print(my_list) # [10, 2, 3, 15, 20, 30] # 插入元素 # insert(i, x) 在索引i插入元素x my_list.insert(1, 100) print(my_list) # [10, 100, 2, 3, 15, 20, 30) # 刪除元素 # remove, pop, del # remove(x) 刪除list中第一個值為 x 的元素,若找不到該元素會拋出 ValueError my_list.remove(100) print(my_list) # [10, 2, 3, 15, 20, 30] # pop([i]),刪除並返回 索引i 的元素。如果未指定i,則刪除並返回最後一個元素 my_list.pop() print(my_list) # [10, 2, 3, 15, 20] del my_list[1] print(my_list) # [10, 3, 15, 20] my_list.clear() print(my_list) # [] |
5. 列表操作
使用 + 運算子連接兩個清單
使用 * 運算子複製
1 2 3 4 5 6 |
my_list = [1, 2, 3] new_list = my_list + [4, 5, 6] print(new_list) # [1, 2, 3, 4, 5, 6] repeated_list = new_list * 2 print(repeated_list) # [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6] |
6. 清單常用方法
count()、reverse()、copy()、len()、max()、min()、sort()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# count(x) # 返回值為 x 的元素在列表中出現的次數 my_list = [1, 2, 2, 3, 4] print(my_list.count(2)) # 2 # reverse() # 反轉列表 my_list.reverse() print(my_list) # [4, 3, 2, 2, 1] # copy() # 返回列表的一個淺拷貝 new_list = my_list.copy() # PS: 淺拷貝與深拷貝 import copy shallow_copy = copy.copy(my_list) deep_copy = copy.deepcopy(my_list) # len() # 返回列表的長度 print(len(my_list)) # 輸出: 5 # max() # 返回列表中最大的元素 print(max(my_list)) # 4 # min() # 返回列表中最小的元素 print(min(my_list)) # 1 # sort(key=None, reverse=False) # 對列表進行排序,默認升序,reverse=True 降序 test_list = [1, 2, 4, 3] test_list.sort() print(test_list) # [1, 2, 3, 4] test_list.sort(reverse=True) print(test_list) # [4, 3, 2, 1] |
7. 列表推導式 (list comprehension)
是一種簡潔且強大的語法,用於快速創建列表。它允許你在一行代碼中生成新的列表,並且通常比使用 for 迴圈更簡潔和高效
PS: 需要額外紀錄介紹相關用法與範例
1 2 3 4 5 6 7 8 9 |
# [expression for item in iterable if condition] # expression: 對 item 進行操作或計算,結果會成為新列表的元素 # item: 從 iterable 中取出的元素 # iterable: 可迭代對象(如列表、元組、字串、範圍等) # if condition(可選): 過濾條件,只有滿足條件的 item 才會被處理 numbers = [1, 2, 3, 4, 5] squares = [x**2 for x in numbers] print(squares) # [1, 4, 9, 16, 25] |
8. 嵌套列表
一個list內的元素也是list,在機器學習與矩陣運算下常使用到
1 2 |
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(nested_list[1][2]) # 6 |
9. 列表循環
使用 for 迴圈遍歷列表
1 2 |
for item in my_list: print(item) |
10. in 與 not in
檢查元素是否存在
1 2 3 4 5 6 |
my_list = [1, 2, 3, 4, 5] if 1 in my_list: print("1 is in my_list") if 6 not in my_list: print("6 is not in my_list") |