List (列表)
2024年11月12日大约 4 分鐘
學習內容:
- 介紹 Python 中的 List
- 理解列表的索引 (Indexing)、列表的切片 (Slicing)
- 添加元素、列表重複
- 巢狀列表 (Nested List)
- 使用
min()
與max()
等基本函式 - 其他常見的列表函式
- 列表推導式(List Comprehension)
什麼是 List (列表)?
List 是一種內建的資料結構,可以用來存放多個值。列表可以包含各種類型的元素,甚至可以包含其他列表(稱為嵌套列表)。在 Python 中,列表用方括號 []
表示,元素之間用逗號 ,
分隔。
範例:
numbers = [1, 2, 3, 4, 5]
fruits = ["apple", "banana", "cherry"]
mixed = [1, "apple", 3.14, True]
索引 (Indexing)
在列表中,可以使用索引來訪問或修改特定位置的元素。索引從 0 開始,負索引則從列表末尾往回計數。
範例:
animals = ["dog", "cat", "bird"]
# 使用正索引
print(animals[0]) # dog
print(animals[2]) # bird
# 使用負索引
print(animals[-1]) # bird
print(animals[-3]) # dog
# 修改元素
animals[1] = "tiger"
print(animals) # ["dog", "tiger", "bird"]
列表的切片 (Slicing)
切片是一種強大的方式,可以用來獲取列表中的一部分元素。切片使用 起始索引:結束索引
的語法,並返回一個新的子列表。請注意,切片的結束索引是不包含在內的。
基本語法
列表[起始索引:結束索引:步長]
- 起始索引:從哪個位置開始(包含這個索引,預設為 0)
- 結束索引:在哪個位置結束(不包含這個索引,預設為列表長度)
- 步長:每隔幾個元素取一次(預設為 1)
範例
取得子列表
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 取出索引 2 到索引 5 的元素(不含索引 5)
sub_list = numbers[2:5]
print(sub_list) # [2, 3, 4]
# 省略起始索引,從頭開始
print(numbers[:4]) # [0, 1, 2, 3]
# 省略結束索引,直到列表結束
print(numbers[6:]) # [6, 7, 8, 9]
# 使用負索引進行切片
print(numbers[-4:-1]) # [6, 7, 8]
使用步長
# 每隔一個元素取一次
print(numbers[::2]) # [0, 2, 4, 6, 8]
# 使用負步長,反向切片
print(numbers[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
切片的應用
複製列表
copy_numbers = numbers[:] # 創建一個新的副本 print(copy_numbers) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
反轉列表
reversed_numbers = numbers[::-1] print(reversed_numbers) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
添加元素 (Adding Elements)
可以使用以下方法來添加元素:
使用 append()
將元素添加到列表末尾
colors = ["red", "blue"]
colors.append("green")
print(colors) # ["red", "blue", "green"]
使用 insert()
在指定位置插入元素
colors.insert(1, "yellow")
print(colors) # ["red", "yellow", "blue", "green"]
使用 extend()
將多個元素加入列表
colors.extend(["orange", "purple"])
print(colors) # ["red", "yellow", "blue", "green", "orange", "purple"]
重複列表元素
可以使用 *
操作符將列表重複多次:
numbers = [1, 2, 3]
print(numbers * 3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
巢狀列表 (Nested List)
列表可以包含其他列表,這稱為巢狀列表。可以使用多層索引來訪問內部元素。
範例:
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 訪問內層元素
print(matrix[0][1]) # 2
print(matrix[2][2]) # 9
常見列表函式
可以使用 min()
和 max()
來找出列表中最小和最大的值:
scores = [23, 56, 12, 78, 34]
print(min(scores)) # 12
print(max(scores)) # 78
使用 len()
計算列表中的元素數量:
names = ["Alice", "Bob", "Charlie"]
print(len(names)) # 3
使用 sum()
計算列表中所有數值的總和(適用於數值列表):
numbers = [10, 20, 30]
print(sum(numbers)) # 60
使用 sorted()
返回一個排序後的列表(原列表不會改變):
scores = [50, 20, 30, 10, 40]
print(sorted(scores)) # [10, 20, 30, 40, 50]
print(scores) # [50, 20, 30, 10, 40] (未變更)
使用 count()
返回列表中某個值出現的次數:
letters = ["a", "b", "a", "c", "a"]
print(letters.count("a")) # 3
使用 index()
找到某個值的索引位置:
fruits = ["apple", "banana", "cherry"]
print(fruits.index("banana")) # 1
列表推導式 (List Comprehension)
列表推導式是一種簡潔的語法,可以用來生成列表。它的結構類似於數學中的集合表達式。
基本語法
[表達式 for 元素 in 可迭代對象 if 條件]
範例 1:產生平方數列表
squares = [x**2 for x in range(5)]
print(squares) # [0, 1, 4, 9, 16]
範例 2:只保留偶數
evens = [x for x in range(10) if x % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]
範例 3:將列表中的每個字符串轉為大寫
words = ["hello", "world"]
uppercase_words = [word.upper() for word in words]
print(uppercase_words) # ["HELLO", "WORLD"]
練習
- 創建一個列表,包含 5 個數字,並使用
sum()
計算它們的總和。 - 編寫一個列表推導式,從 1 到 20 的數字中,挑選出所有的偶數並將它們乘以 2。
- 創建一個嵌套列表(3x3 矩陣),並使用索引取出矩陣中的每一個角落元素。