在 Python 程式設計中,串列 (list) 是一種用途廣泛的序列型別,用於儲存有序的元素集合。本文將深入探討 Python 串列的各個方面,包括定義、建立方式、基本操作、常用方法、迭代,以及實際應用。
什麼是串列 (list)?
串列是由一系列按照特定順序排列的元素組成的資料結構。串列具有以下特點:
- 有序性 (Ordered): 串列中的元素有固定的順序,可以透過索引 (index) 存取。
- 可變性 (Mutable): 串列的內容可以修改 (新增、刪除、修改元素)。
- 異質性 (Heterogeneous): 串列中的元素可以是不同的資料型別 (例如,同時包含整數、字串、浮點數,甚至是其他串列)。
在 Python 中,串列屬於 list 型別。
建立串列
有幾種方式可以建立串列:
- 使用方括號 [] (最常見): 將元素用逗號分隔,並放在方括號中。
- 使用 list() 函數: 將其他可迭代物件 (例如字串、元組) 轉換為串列。
# 使用方括號 []
my_list = [1, 2, 3, 4, 5]
fruits = ['apple', 'banana', 'orange']
mixed_list = [1, 'hello', True, 3.14]
empty_list = []
# 使用 list() 函數
string = "Hello"
char_list = list(string) # 結果: ['H', 'e', 'l', 'l', 'o']
tuple_data = (10, 20, 30)
list_from_tuple = list(tuple_data) # 結果: [10, 20, 30]
print(type(my_list)) # 輸出: <class 'list'>
串列的基本操作
1. 索引 (Indexing)
使用方括號 [] 和元素的索引 (從 0 開始) 來存取串列中的特定元素。也可以使用負數索引,-1 表示最後一個元素,-2 表示倒數第二個元素,依此類推。
my_list = ['a', 'b', 'c', 'd', 'e']
print(f"my_list[0] -> {my_list[0]}") # 輸出: a
print(f"my_list[2] -> {my_list[2]}") # 輸出: c
print(f"my_list[-1] -> {my_list[-1]}") # 輸出: e
print(f"my_list[-3] -> {my_list[-3]}") # 輸出: c
2. 切片 (Slicing)
使用 [start:end:step] 的形式來提取串列的一部分。 start 是起始索引 (包含),end 是結束索引 (不包含),step 是步長 (預設為 1)。
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(f"my_list[2:5] -> {my_list[2:5]}") # 輸出: [2, 3, 4]
print(f"my_list[:4] -> {my_list[:4]}") # 輸出: [0, 1, 2, 3] (從開頭到索引 4)
print(f"my_list[6:] -> {my_list[6:]}") # 輸出: [6, 7, 8, 9] (從索引 6 到結尾)
print(f"my_list[::2] -> {my_list[::2]}") # 輸出: [0, 2, 4, 6, 8] (每隔一個元素取一個)
print(f"my_list[::-1] -> {my_list[::-1]}") # 輸出: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] (反轉串列)
3. 新增與修改元素
- append(item): 在串列末尾新增一個元素。
- insert(index, item): 在指定索引處插入一個元素。
- extend(iterable): 將另一個可迭代物件的所有元素添加到串列末尾。
my_list = [1, 2, 3]
my_list.append(4) # my_list is now [1, 2, 3, 4]
my_list.insert(1, 5) # my_list is now [1, 5, 2, 3, 4]
my_list.extend([6, 7]) # my_list is now [1, 5, 2, 3, 4, 6, 7]
print(my_list)
直接透過索引賦值來修改串列中的元素:
my_list = [1, 2, 3]
my_list[1] = 10 # 將索引 1 的元素修改為 10
print(my_list) # 輸出: [1, 10, 3]
4. 刪除元素
- remove(item): 刪除第一個與指定值相等的元素 (若找不到會引發 ValueError)。
- pop([index]): 移除並返回指定索引處的元素 (預設為最後一個元素)。
- del list[index]: 刪除指定位置的元素 (更通用的刪除語法)。
- clear(): 清空串列中的所有元素。
my_list = [1, 2, 3, 'a', 2, 4]
my_list.remove(2) # my_list is now [1, 3, 'a', 2, 4]
popped_item = my_list.pop() # popped_item is 4, my_list is now [1, 3, 'a', 2]
del my_list[0] # my_list is now [3, 'a', 2]
my_list.clear() # my_list is now []
print(my_list) # 輸出: []
5. 其他運算子
運算子 | 說明 |
---|---|
len(list) | 計算串列長度 (元素個數)。 |
list1 + list2 | 串列串接,回傳一個新的串列。 |
list * n | 將串列重複 n 次,回傳一個新的串列。 |
in / not in | 檢查元素是否存在於串列中,回傳布林值。 |
list1 = [1, 2, 3]
list2 = [4, 5, 6]
print(f"len(list1) -> {len(list1)}") # 輸出: 3
print(f"list1 + list2 -> {list1 + list2}") # 輸出: [1, 2, 3, 4, 5, 6]
print(f"list1 * 2 -> {list1 * 2}") # 輸出: [1, 2, 3, 1, 2, 3]
print(f"1 in list1 -> {1 in list1}") # 輸出: True
print(f"1 not in list2 -> {1 not in list2}") # 輸出: True
串列的常用方法
除了上述基本操作外,Python 串列還提供了許多實用的方法:
方法 | 說明 | 是否修改原串列 |
---|---|---|
sort() | 對串列進行排序 (可使用 reverse=True 降序)。 | 是 (in-place) |
reverse() | 反轉串列中的元素順序。 | 是 (in-place) |
index(item) | 返回指定元素第一次出現的索引。 | 否 |
count(item) | 計算指定元素在串列中出現的次數。 | 否 |
copy() | 返回串列的淺拷貝 (shallow copy)。 | 否 |
my_list = [3, 1, 4, 1, 5, 9, 2, 6]
my_list.sort()
print(f"Sorted list: {my_list}") # 輸出: [1, 1, 2, 3, 4, 5, 6, 9]
my_list.reverse()
print(f"Reversed list: {my_list}") # 輸出: [9, 6, 5, 4, 3, 2, 1, 1]
print(f"Index of 4: {my_list.index(4)}") # 輸出: 3
print(f"Count of 1: {my_list.count(1)}") # 輸出: 2
走訪串列 (Iteration)
您可以使用 for 迴圈來遍歷串列中的每個元素:
fruits = ['apple', 'banana', 'orange']
for fruit in fruits:
print(f"I like {fruit}s.")
串列的應用
- 儲存一系列相關資料: 例如,學生的成績、購物清單、待辦事項等。
- 作為函數的參數或返回值: 許多函數會接受串列作為參數,或返回串列作為結果。
- 實現其他資料結構: 例如,堆疊 (stack) 和佇列 (queue) 可以使用串列來實現。
- 資料分析和機器學習: 串列常用於儲存和處理數據集。
總結
Python 的串列 (list) 是一種功能強大且靈活的資料結構。由於其有序、可變、異質的特性,加上豐富的操作和方法,使其成為 Python 中最常用和最重要的資料型別之一。確實掌握串列的用法,對於任何 Python 開發者來說都至關重要。