Python extend() - List 合併
extend() 方法用來將另一個可迭代物件的所有元素加入 list 中。
基本用法
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.extend(list2)
print(list1) # [1, 2, 3, 4, 5, 6]
語法
list.extend(iterable)
iterable:任何可迭代物件(list、tuple、set、string 等)- 回傳:None(直接修改原 list)
修改原 list
extend() 會直接修改原 list:
numbers = [1, 2, 3]
result = numbers.extend([4, 5])
print(numbers) # [1, 2, 3, 4, 5]
print(result) # None
可迭代物件
extend() 可以接受任何可迭代物件:
my_list = [1, 2]
# 從 list 擴展
my_list.extend([3, 4])
print(my_list) # [1, 2, 3, 4]
# 從 tuple 擴展
my_list.extend((5, 6))
print(my_list) # [1, 2, 3, 4, 5, 6]
# 從 set 擴展(順序不固定)
my_list.extend({7, 8})
print(my_list) # [1, 2, 3, 4, 5, 6, 7, 8]
# 從字串擴展(每個字元)
my_list = ["a"]
my_list.extend("bc")
print(my_list) # ['a', 'b', 'c']
# 從 range 擴展
my_list = []
my_list.extend(range(5))
print(my_list) # [0, 1, 2, 3, 4]
extend() vs append()
# extend() - 展開後加入
list1 = [1, 2, 3]
list1.extend([4, 5])
print(list1) # [1, 2, 3, 4, 5]
# append() - 作為單一元素加入
list2 = [1, 2, 3]
list2.append([4, 5])
print(list2) # [1, 2, 3, [4, 5]]
extend() vs + 運算子
# extend() - 修改原 list
list1 = [1, 2, 3]
list1.extend([4, 5])
print(list1) # [1, 2, 3, 4, 5]
# + 運算子 - 建立新 list
list2 = [1, 2, 3]
list2 = list2 + [4, 5]
print(list2) # [1, 2, 3, 4, 5]
使用 extend() 效率較高,因為不需要建立新的 list。
extend() vs += 運算子
+= 運算子在 list 上的效果和 extend() 相同:
# extend()
list1 = [1, 2, 3]
list1.extend([4, 5])
print(list1) # [1, 2, 3, 4, 5]
# += 運算子
list2 = [1, 2, 3]
list2 += [4, 5]
print(list2) # [1, 2, 3, 4, 5]
實際範例
合併多個 list
all_numbers = []
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]
all_numbers.extend(list1)
all_numbers.extend(list2)
all_numbers.extend(list3)
print(all_numbers) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
收集多個來源的資料
def get_users_from_db():
return ["Alice", "Bob"]
def get_users_from_api():
return ["Charlie", "David"]
all_users = []
all_users.extend(get_users_from_db())
all_users.extend(get_users_from_api())
print(all_users) # ['Alice', 'Bob', 'Charlie', 'David']
展開巢狀 list
nested = [[1, 2], [3, 4], [5, 6]]
flat = []
for sublist in nested:
flat.extend(sublist)
print(flat) # [1, 2, 3, 4, 5, 6]
讀取多個檔案的內容
def read_lines(filename):
# 模擬讀取檔案
return [f"{filename} line 1", f"{filename} line 2"]
all_lines = []
files = ["file1.txt", "file2.txt"]
for f in files:
all_lines.extend(read_lines(f))
print(all_lines)
# ['file1.txt line 1', 'file1.txt line 2', 'file2.txt line 1', 'file2.txt line 2']
常見錯誤
誤用回傳值
# 錯誤:extend() 回傳 None
numbers = [1, 2].extend([3, 4])
print(numbers) # None
# 正確
numbers = [1, 2]
numbers.extend([3, 4])
print(numbers) # [1, 2, 3, 4]
字串會被拆成字元
my_list = ["hello"]
# extend 字串會拆成字元
my_list.extend("world")
print(my_list) # ['hello', 'w', 'o', 'r', 'l', 'd']
# 如果要加入整個字串
my_list = ["hello"]
my_list.extend(["world"])
print(my_list) # ['hello', 'world']
時間複雜度
extend() 的時間複雜度是 O(k),其中 k 是要加入的元素數量。