如何在Python中连接两个列表?
在Python中,怎么把两个列表合并在一起呢?
举个例子:
listone = [1, 2, 3]
listtwo = [4, 5, 6]
你期望的结果是:
>>> joinedlist
[1, 2, 3, 4, 5, 6]
31 个回答
你也可以创建一个生成器,它可以简单地遍历两个列表中的所有项目,这个过程可以使用 itertools.chain()
来实现。这样,你就可以把多个列表(或者任何可以遍历的东西)连接在一起处理,而不需要把这些项目复制到一个新的列表里:
import itertools
for item in itertools.chain(listone, listtwo):
# Do something with each list item
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
。
使用 +
运算符可以把两个列表合并在一起:
listone = [1, 2, 3]
listtwo = [4, 5, 6]
joinedlist = listone + listtwo
输出结果:
>>> joinedlist
[1, 2, 3, 4, 5, 6]
注意:这样做会创建一个新列表,这个新列表里包含了第一个列表的所有项目的浅拷贝,然后是第二个列表的所有项目的浅拷贝。如果你想要列表的深拷贝,可以使用 copy.deepcopy()。