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

例子:

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

预期结果:

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

当前回答

这很简单,我认为它甚至在教程中显示了:

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

其他回答

如果您需要使用复杂的排序规则合并两个有序列表,您可能需要像下面的代码一样自行滚动(使用简单的排序规则以提高可读性:-)。

list1 = [1,2,5]
list2 = [2,3,4]
newlist = []

while list1 and list2:
    if list1[0] == list2[0]:
        newlist.append(list1.pop(0))
        list2.pop(0)
    elif list1[0] < list2[0]:
        newlist.append(list1.pop(0))
    else:
        newlist.append(list2.pop(0))

if list1:
    newlist.extend(list1)
if list2:
    newlist.extend(list2)

assert(newlist == [1, 2, 3, 4, 5])

可以使用集合获取唯一值的合并列表

mergedlist = list(set(listone + listtwo))

Python>=3.5可选:[*l1,*l2]

通过接受PEP 448引入了另一种备选方案,值得一提。

名为Additional Unpacking Generalization的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]

因为它将首先解压缩可迭代内容,然后简单地从内容创建一个列表。

您可以在Python中使用union()函数。

joinedlist = union(listone, listtwo)
print(joinedlist)

从本质上讲,它是删除两个列表中每个重复项中的一个。因为您的列表没有任何重复项,所以它只返回两个列表的连接版本。

您还可以使用list.exextend()方法将列表添加到另一个列表的末尾:

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

listone.extend(listtwo)

如果要保持原始列表的完整性,可以创建一个新的列表对象,并将两个列表都扩展到该对象:

mergedlist = []
mergedlist.extend(listone)
mergedlist.extend(listtwo)