如何在Python中连接两个列表?

3238 投票
31 回答
4433988 浏览
提问于 2025-04-15 15:55

在Python中,怎么把两个列表合并在一起呢?

举个例子:

listone = [1, 2, 3]
listtwo = [4, 5, 6]

你期望的结果是:

>>> joinedlist
[1, 2, 3, 4, 5, 6]

31 个回答

405

你也可以创建一个生成器,它可以简单地遍历两个列表中的所有项目,这个过程可以使用 itertools.chain() 来实现。这样,你就可以把多个列表(或者任何可以遍历的东西)连接在一起处理,而不需要把这些项目复制到一个新的列表里:

import itertools
for item in itertools.chain(listone, listtwo):
    # Do something with each list item
653

Python 版本 >= 3.5 的一种替代方法是:[*l1, *l2]

还有一种替代方法是通过接受 PEP 448 引入的,这个方法值得一提。

这个 PEP 的标题是 额外的解包泛化,它主要减少了在 Python 中使用星号 * 表达式时的一些语法限制;通过这个方法,现在可以用以下方式将两个列表(适用于任何可迭代对象)合并:

>>> l1 = [1, 2, 3]
>>> l2 = [4, 5, 6]
>>> joined_list = [*l1, *l2]  # unpack both iterables in a list literal
>>> print(joined_list)
[1, 2, 3, 4, 5, 6]

这个功能是在 Python 3.5 中定义的,但没有向 3.x 系列的早期版本回溯。在不支持的版本中,会出现 SyntaxError 错误。

和其他方法一样,这个方法也 创建了元素的浅拷贝


这种方法的 好处 是,实际上你不需要列表就可以使用它;任何可迭代的东西都可以。正如 PEP 中所说:

这也是将可迭代对象汇总成列表的一种更易读的方法,比如 my_list + list(my_tuple) + list(my_range) 现在等同于 [*my_list, *my_tuple, *my_range]

所以,虽然用 + 相加会因为类型不匹配而引发 TypeError 错误:

l = [1, 2, 3]
r = range(4, 7)
res = l + r

但下面的代码就不会:

res = [*l, *r]

因为它会先解包可迭代对象的内容,然后简单地从这些内容创建一个 list

5470

使用 + 运算符可以把两个列表合并在一起:

listone = [1, 2, 3]
listtwo = [4, 5, 6]

joinedlist = listone + listtwo

输出结果:

>>> joinedlist
[1, 2, 3, 4, 5, 6]

注意:这样做会创建一个新列表,这个新列表里包含了第一个列表的所有项目的浅拷贝,然后是第二个列表的所有项目的浅拷贝。如果你想要列表的深拷贝,可以使用 copy.deepcopy()

撰写回答