Python 如何拼接(合并)两个列表?
合并列表:+ 运算符创建新列表;extend() 就地追加;[*a, *b] 解包语法;itertools.chain 惰性拼接。本文给出四种方式与性能差异。
四种常用方式:a + b 生成新列表、a.extend(b) 就地追加、[*a, *b] 解包、itertools.chain(a, b) 惰性迭代——按需选择。
四种方式
a = [1, 2, 3]
b = [4, 5, 6]
# 1. + 运算符:新列表,原列表不变
c = a + b # [1, 2, 3, 4, 5, 6]
# 2. extend:就地修改 a
a.extend(b) # a 变成 [1, 2, 3, 4, 5, 6]
# 3. 解包(3.5+,可读性好)
c = [*a, *b]
# 4. itertools.chain:惰性,适合超大列表
import itertools
for x in itertools.chain(a, b): ...
怎么选
| 需求 | 方式 |
|---|---|
| 要新列表、保留原列表 | + 或解包 |
| 就地追加省内存 | extend |
| 拼接很多列表 | chain(避免中间拷贝) |
| 列表推导场景 | [x for lst in lists for x in lst] |
常见问题(FAQ)
Q:append 和 extend 区别? append 把参数当单个元素加入(列表会嵌套);extend 把可迭代对象的元素逐个加入。
Q:+ 会改原列表吗? 不会,生成新对象。