Python 串列 (list) 型別詳解:建立、操作、方法與應用

Python 串列 (list) 型別詳解:建立、操作、方法與應用 - CCC Blog
一張清單或待辦事項的圖片,象徵著 Python 串列的有序集合特性。

在 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 開發者來說都至關重要。

較新的 較舊