Last Updated on 2021-10-11 by Clay
List(列表)是 Python 中最著名的儲存資料的方法,每一個元素(element)可能是一個數值、也有可能是一個字串;而每一個元素都有一個自己的索引(index),從 0 開始計數。
今天我想仔細地紀錄,Python 中的 List 究竟該如何操作。我會分成以下幾個小節來解釋:
- 初始化 List
- 訪問 List 中的元素
- 更新 List 中的元素
- 刪除 List 中的元素
- List 中常見的操作方法
初始化 List
我們要將一個變數賦值 List 十分簡單,可以使用 list()
或是 []
來建立;如果有要初始化在 List 中的元素,可以直接填在方括號內。
值得注意的是,Python 中 List 的元素並不用全部都是同樣的資料型態,如同下方的範例程式碼,你可以同時放入整數(int)及字串(string)。
而每個元素之間,都需要使用逗號 ,
隔開。
List_1 = list()
List_2 = []
List_3 = [1, 2, "hello"]
print("List_1:", List_1)
print("List_2:", List_2)
print("List_3:", List_3)
Output:
List_1: []
List_2: []
List_3: [1, 2, 'hello']
訪問 List 中的元素
如果只是要印出 List 中的元素的話,我們可以直接使用 for
來取得元素值並印出;但除此之外,也可以使用索引(index)來一個個印出對應的元素。
在 Python 中,如果沒有要做跟索引有關的判斷的話,建議直接取得元素值,程式的執行效率較佳。
List = [1, 2, "hello"]
# Method 1
for element in List:
print(element)
# Method 2
for i in range(len(List)):
print(List[i])
Output:
1
2
hello
1
2
hello
可以看到,兩種方法都可以印出所有的元素值。
看過了如何印出元素後,來看看 Python 中對於 List 的其他存取技巧。
- 如果要求的索引值大於等於 List 的長度,會發生
IndexError: list index out of range
的報錯 - 可以使用負數索引,會倒著存取 List 的元素
:
是遍歷所有元素值的符號,假設你使用n:m
來存取 List,那麼便會從索引n
的元素讀取到索引m-1
的元素為止
List = [1, 2, "hello"]
print("List:", List)
print("List[-1]:", List[-1])
print("List[1:]:", List[1:])
print("List[-2:]:", List[-2:])
print("List[3]:", List[3])
Output:
List: [1, 2, 'hello']
List[-1]: hello
List[1:]: [2, 'hello']
List[-2:]: [2, 'hello']
Traceback (most recent call last):
File "/Users/clay/Projects/PythonProjects/python_children_edu/try.py", line 7, in <module>
print("List[3]:", List[3])
IndexError: list index out of range
這裡能研究的東西很多,請盡情地嘗試不同的寫法,相信對於 Python List 的使用會更加得心應手。
更新 List 中的元素
更新 List 中的元素非常單純,只需要替指定索引的元素賦值即可。
List = [1, 2, "hello"]
# Update
List[2] = 3
print(List)
Output:
[1, 2, 3]
刪除 List 中的元素
刪除 List 中指定索引的元素,可以使用 del
語法。
List = [1, 2, "hello"]
# Delete
del List[0]
print(List)
Output:
[2, 'hello']
List 中常見的操作
List 中有許多常見的操作方法,包含以下:
list.append(x)
: 將一項新元素添加至 List 的末端list.extend(iterable)
: 將新的可迭代物件元素添加至 List 的末端list.insert(i, x)
: 在特定索引 i 的位置插入新的元素list.remove(x)
: 在 List 中刪除第一項值為 x 的元素list.pop([i])
: 刪除 List 中指定索引的元素並返回。如果未指定索引,則刪除返回 List 中的最後一項list.clear()
: 清空整個 Listlist.index(x)
: 返回元素為 x 的索引值list.count(x)
: 計算 List 中有多少元素為 xlist.sort(reverse=False)
: 對 List 中的元素進行排序list.reverse()
: 反轉 List 中的所有元素list.copy()
: 返回 List 的淺複製(shallow copy)
list.append(x)
List = [1, 2, 3]
# Append
List.append(4)
print(List)
Output:
[1, 2, 3, 4]
list.extend(iterable)
List = [1, 2, 3]
iterable = [4, 5, 6]
# Extend
List.extend(iterable)
print(List)
Output:
[1, 2, 3, 4, 5, 6]
list.insert(i, x)
List = [1, 2, 3]
# Insert
List.insert(1, 1.5)
print(List)
Output:
[1, 1.5, 2, 3]
list.remove(x)
List = [1, 2, 3]
# Remove
List.remove(2)
print(List)
Output:
[1, 3]
list.pop([i])
List = [1, 2, 3]
# Pop
List.pop()
print(List)
Output:
[1, 2]
list.clear()
List = [1, 2, 3]
# Clear
List.clear()
print(List)
Output:
[]
list.index(x)
List = [1, 2, 3]
# Index
print(List.index(3))
Output:
2
list.count(x)
List = [1, 2, 3]
# Count
print(List.count(3))
Output:
1
list.sort()
reverse=False
為從小排到大reverse=True
為大排到小
List = [1, 2, 3]
# Sort
List.sort(reverse=True)
print(List)
Output:
[3, 2, 1]
list.reverse()
List = [1, 2, 3]
# Reverse
List.reverse()
print(List)
Output:
[3, 2, 1]
list.copy()
如果不是使用 list.copy() 而是直接賦值的話,元素間是共享記憶體位置的;這樣的壞處是,如果你更動了原始的 List,那你賦值的 List 底下的元素也會隨之變動。
這樣很容易引起程式錯誤。
我們來簡單看個對比的範例:
List = [1, 2, 3]
# Copy
List_assign = List
List_copy = List.copy()
# Change element
List[1] = 20
print("List:", List)
print("List_assign:", List_assign)
print("List_copy:", List_copy)
Output:
List: [1, 20, 3]
List_assign: [1, 20, 3]
List_copy: [1, 2, 3]
References
- https://docs.python.org/3/tutorial/datastructures.html
- https://www.programiz.com/python-programming/list
- https://www.w3schools.com/python/python_lists.asp