首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python List.extend() 方法完整教學:列表末尾批次展開新增元素

     編輯:更多程式設計知識

extend() 是 Python 列表用於批次新增多個元素的核心方法,將可迭代物件(列表、元組、字串、range、生成器等)展開後逐一加入列表末尾。與 append() 的「整體加入」形成鮮明對比,是列表合併、展平、累積資料的標準工具。

語法與參數

list.extend(iterable)
  • iterable:任意可迭代物件(list、tuple、str、set、dict、range、generator 等)
  • 字串會被展開為單一字元
  • 字典預設展開 keys(同 list(dict))

回傳值

回傳 None,原地修改列表(in-place),不建立新列表。

基本範例

#!/usr/bin/python
aList = [123, 'xyz', 'zara', 'abc', 123]
bList = [2009, 'manni']
aList.extend(bList)
print("Extended List :", aList)
# 輸出:Extended List : [123, 'xyz', 'zara', 'abc', 123, 2009, 'manni']

核心特性與 append() 差異比較

特性append(x)extend(iterable)
參數型別單一物件可迭代物件
加入方式整體作為一個元素展開後逐一加入
列表長度變化+1+len(iterable)
巢狀結構會產生不會(展平一層)

lst = [1, 2]
lst.append([3, 4])
print(lst)  # [1, 2, [3, 4]]  ← 巢狀

lst = [1, 2]
lst.extend([3, 4])
print(lst)  # [1, 2, 3, 4]    ← 展平

支援的可迭代物件類型


# 列表
[1,2].extend([3,4])        # [1,2,3,4]

# 元組
[1,2].extend((3,4))        # [1,2,3,4]

# 字串(展開為字元!)
[1,2].extend('ab')         # [1, 2, 'a', 'b']

# range
[1,2].extend(range(3,5))   # [1, 2, 3, 4]

# 集合(順序不定)
[1,2].extend({3,4})        # [1, 2, 3, 4] 或 [1, 2, 4, 3]

# 字典(展開 keys)
[1,2].extend({3:'a', 4:'b'}) # [1, 2, 3, 4]

# 生成器
[1,2].extend(x*2 for x in range(3))  # [1, 2, 0, 2, 4]

進階應用場景

1. 合併多個列表(高效能)


# 方法一:extend(原地修改,記憶體效率佳)
result = []
for lst in [list1, list2, list3]:
    result.extend(lst)

# 方法二:itertools.chain(大量列表、串流處理)
from itertools import chain
result = list(chain(list1, list2, list3))

# 方法三:+ 運算子(產生新列表,小列表適用)
result = list1 + list2 + list3

2. 展平巢狀列表(一層)


nested = [[1,2], [3,4], [5,6]]
flat = []
for sublist in nested:
    flat.extend(sublist)
print(flat)  # [1, 2, 3, 4, 5, 6]

# 列表生成式替代
flat = [x for sublist in nested for x in sublist]

3. 累積處理大量資料(避免重複建立列表)


# 不好的做法:每次迴圈產生新列表
result = []
for chunk in data_chunks:
    result = result + process(chunk)  # O(n²) 記憶體複製

# 好的做法:extend 原地累積
result = []
for chunk in data_chunks:
    result.extend(process(chunk))  # O(n) 總時間

4. 字串分割後轉列表


# 錯誤:append 會把整個列表當一個元素
words = []
words.append("hello world".split())
print(words)  # [['hello', 'world']]

# 正確:extend 展開
words = []
words.extend("hello world".split())
print(words)  # ['hello', 'world']

效能分析

  • 時間複雜度:O(k),k 為可迭代物件長度
  • 空間複雜度:O(1) 額外空間(原地擴充)
  • CPython 實作會預估所需空間一次擴充,避免多次 resize
  • 大量資料累積時,extend() 顯著優於 + 或 +=(後者會建立新列表)

常見陷阱


# 陷阱 1:字串會被展開為字元
lst = []
lst.extend("abc")
print(lst)  # ['a', 'b', 'c']  而非 ['abc']

# 正確加入完整字串
lst.append("abc")  # ['abc']
# 或
lst.extend(["abc"])  # ['abc']

# 陷阱 2:extend 字典只展開 keys
d = {'a': 1, 'b': 2}
lst = []
lst.extend(d)
print(lst)  # ['a', 'b']  非 [('a',1), ('b',2)]

# 若要展開 key-value pairs
lst.extend(d.items())  # [('a', 1), ('b', 2)]

總結

extend() 是列表批次新增元素的標準方法,展開可迭代物件、原地修改、回傳 None。核心優勢在於記憶體效率(避免建立中間列表)與語意清晰(展平一層)。掌握 append()(單一整體)與 extend()(批次展開)的差異,並善用於列表合併、展平、資料累積等場景,能寫出更高效、更 Pythonic 的程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved