Python List (串列)

List 是 Python 中最常用的資料結構,用來儲存有序的元素集合。List 是可變的 (mutable),可以新增、刪除或修改元素。

建立 List

使用方括號 [] 建立 List:

# 空的 list
empty_list = []

# 有元素的 list
fruits = ["apple", "banana", "orange"]
numbers = [1, 2, 3, 4, 5]

# list 可以包含不同型別的元素
mixed = [1, "hello", 3.14, True]

存取元素

使用索引存取元素,索引從 0 開始:

fruits = ["apple", "banana", "orange"]

print(fruits[0])   # apple
print(fruits[1])   # banana
print(fruits[-1])  # orange(負數從尾端算起)
print(fruits[-2])  # banana

List 切片 (Slicing)

語法:list[start:end:step]

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(numbers[2:5])    # [2, 3, 4]
print(numbers[:3])     # [0, 1, 2]
print(numbers[7:])     # [7, 8, 9]
print(numbers[::2])    # [0, 2, 4, 6, 8]
print(numbers[::-1])   # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0](反轉)

修改元素

fruits = ["apple", "banana", "orange"]
fruits[1] = "grape"
print(fruits)  # ['apple', 'grape', 'orange']

List 長度

fruits = ["apple", "banana", "orange"]
print(len(fruits))  # 3

新增元素

fruits = ["apple", "banana"]

# append() - 在尾端新增一個元素
fruits.append("orange")
print(fruits)  # ['apple', 'banana', 'orange']

# insert() - 在指定位置新增元素
fruits.insert(1, "grape")
print(fruits)  # ['apple', 'grape', 'banana', 'orange']

# extend() - 新增多個元素
fruits.extend(["kiwi", "mango"])
print(fruits)  # ['apple', 'grape', 'banana', 'orange', 'kiwi', 'mango']

刪除元素

fruits = ["apple", "banana", "orange", "grape"]

# remove() - 刪除指定值的元素
fruits.remove("banana")
print(fruits)  # ['apple', 'orange', 'grape']

# pop() - 刪除指定索引的元素(預設是最後一個)
removed = fruits.pop()  # 刪除並回傳最後一個元素
print(removed)  # grape
print(fruits)   # ['apple', 'orange']

removed = fruits.pop(0)  # 刪除並回傳第一個元素
print(removed)  # apple
print(fruits)   # ['orange']

# del - 刪除指定索引的元素
fruits = ["apple", "banana", "orange"]
del fruits[1]
print(fruits)  # ['apple', 'orange']

# clear() - 清空整個 list
fruits.clear()
print(fruits)  # []

檢查元素是否存在

fruits = ["apple", "banana", "orange"]

print("apple" in fruits)      # True
print("grape" in fruits)      # False
print("grape" not in fruits)  # True

遍歷 List

fruits = ["apple", "banana", "orange"]

# 用 for 迴圈
for fruit in fruits:
    print(fruit)

# 如果需要索引
for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")

輸出:

apple
banana
orange
0: apple
1: banana
2: orange

List 排序

numbers = [3, 1, 4, 1, 5, 9, 2, 6]

# sort() - 原地排序(會修改原 list)
numbers.sort()
print(numbers)  # [1, 1, 2, 3, 4, 5, 6, 9]

# 降冪排序
numbers.sort(reverse=True)
print(numbers)  # [9, 6, 5, 4, 3, 2, 1, 1]

# sorted() - 回傳新的排序 list(不修改原 list)
original = [3, 1, 4, 1, 5]
sorted_list = sorted(original)
print(original)     # [3, 1, 4, 1, 5]
print(sorted_list)  # [1, 1, 3, 4, 5]

List 反轉

numbers = [1, 2, 3, 4, 5]

# reverse() - 原地反轉
numbers.reverse()
print(numbers)  # [5, 4, 3, 2, 1]

# 或用切片
numbers = [1, 2, 3, 4, 5]
reversed_list = numbers[::-1]
print(reversed_list)  # [5, 4, 3, 2, 1]

List 複製

original = [1, 2, 3]

# 直接賦值是參考,修改會影響原 list
ref = original
ref.append(4)
print(original)  # [1, 2, 3, 4]

# 用 copy() 或切片建立副本
original = [1, 2, 3]
copy1 = original.copy()
copy2 = original[:]
copy1.append(4)
print(original)  # [1, 2, 3]
print(copy1)     # [1, 2, 3, 4]

其他常用方法

numbers = [1, 2, 3, 2, 4, 2, 5]

print(numbers.count(2))  # 3(2 出現的次數)
print(numbers.index(4))  # 4(4 第一次出現的索引)
print(sum(numbers))      # 19(所有元素的總和)
print(max(numbers))      # 5(最大值)
print(min(numbers))      # 1(最小值)

List Comprehension

用簡潔的語法建立 list:

# 傳統寫法
squares = []
for x in range(5):
    squares.append(x ** 2)

# List comprehension
squares = [x ** 2 for x in range(5)]
print(squares)  # [0, 1, 4, 9, 16]

# 加上條件
evens = [x for x in range(10) if x % 2 == 0]
print(evens)  # [0, 2, 4, 6, 8]

巢狀 List

List 中可以包含其他 list:

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

print(matrix[0])     # [1, 2, 3]
print(matrix[0][1])  # 2
print(matrix[1][2])  # 6