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

How do I concatenate two lists in Python?

提问人:y2k 提问时间:11/12/2009 最后编辑:Peter Mortenseny2k 更新时间:4/20/2023 访问量:4324831

问:

这个问题的答案是社区的努力。编辑现有答案以改进此帖子。它目前不接受新的答案或互动。

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

例:

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

预期成果:

>>> joinedlist
[1, 2, 3, 4, 5, 6]
Python 列表 串联

评论

13赞 smci 9/12/2015
您是想简单地追加,还是想按排序顺序合并两个列表?您期望 [1,3,6] 和 [2,4,5] 的输出是多少?我们可以假设两个子列表都已经排序了吗(如您的示例中所示)?
3赞 smci 1/13/2020
...另外,如果列表有重复项怎么办,例如?您希望包含、排除或不在乎重复项吗?[1,2,5] and [2,4,5,6]
8赞 Brendan Metcalfe 6/26/2020
如果有人觉得有用的话,我制作了一个关于连接列表的 6 种方法的 youtube 教程 youtube.com/watch?v=O5kJ1v9XrDw

答:

5411赞 Daniel G 11/12/2009 #1

使用运算符组合列表:+

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

joinedlist = listone + listtwo

输出:

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

评论

161赞 Daniel F 4/19/2012
这是否创建 ListOne 的深层副本并附加 ListTwo?
211赞 Daniel G 4/19/2012
@Daniel它将创建一个新列表,其中包含第一个列表中项目的浅拷贝,然后是第二个列表中项目的浅拷贝。使用 copy.deepcopy 获取列表的深度副本。
311赞 rickcnagy 1/30/2014
这里另一个有用的细节:结果listone += listtwolistone == [1, 2, 3, 4, 5, 6]
22赞 MikeH 2/19/2014
这会@br1ckb0t改变listone所指的内容?那么:list3 也变了吗?list3 = listonelistone+=listtwo
9赞 153957 4/16/2015
@Pygmalion 这不是特定于 Python3 的,而是特定于 NumPy 数组如何处理运算符的。请参阅 J.F. Sebastian 在 Robert Rossney 关于连接 NumPy 数组的答案中的答案。
95赞 Tuure Laurinolli 11/12/2009 #2

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

>>> listone = [1,2,3]
>>> listtwo = [4,5,6]
>>>
>>> listone + listtwo
[1, 2, 3, 4, 5, 6]
404赞 Robert Rossney 11/13/2009 #3

也可以创建一个生成器,该生成器使用 itertools.chain() 简单地遍历两个列表中的项目。这允许您将列表(或任何可迭代对象)链接在一起进行处理,而无需将项目复制到新列表:

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

评论

11赞 cs95 6/4/2019
chain对于两个列表来说,速度较慢(但不是很多),但对于链接多个列表(n >> 2)来说,它是最快的解决方案。
0赞 Moberg 4/11/2020
@cs95慢了什么?
1赞 cs95 5/7/2020
@Moberg 与其他连接列表的方法相比,请在此处查看我的基准测试以供参考。
1赞 Roel Schroeven 6/28/2022
@cs95 您的基准测试用于对所有元素进行迭代,但会将结果转换为列表。有时这正是你想要的,但如果你只是想遍历所有元素,你可以简单地使用迭代器。这可能要快得多。chainchain
263赞 Radagast 9/20/2010 #4

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

mergedlist = list(set(listone + listtwo))

评论

64赞 metasoarous 8/21/2012
但是,如果这是您感兴趣的,它也会删除重复项。添加列表不会这样做。
2赞 Natim 1/29/2013
有什么方法可以做到这一点并保留订购信息?
16赞 Natim 1/29/2013
listone + [x for x in listtwo if x not in listone]
9赞 Nir Alfasi 4/27/2014
+1 恕我直言,这是“合并”(联合)列表的正确方法,而“批准”答案描述了如何合并/添加列表(多集)
5赞 SethMMorton 12/16/2016
如果您关心维护输入顺序,那么就可以了。import collections; mergedlist = list(collections.OrderedDict.fromkeys(listone + listtwo))
309赞 4 revs, 3 users 57%Gourneau #5

您也可以使用 list.extend() 方法将 a 添加到另一个方法的末尾:list

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

listone.extend(listtwo)

如果要保持原始列表不变,可以创建一个新对象,并创建两个列表:listextend

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

评论

2赞 Ayush 7/15/2021
为什么此方法在我的情况下返回?None
1赞 Ayush 7/15/2021
listone = [1,2,3]; listtwo = [4,5,6]; listone.extend(listtwo)这又回到了我身上None
8赞 Gourneau 7/17/2021
它会对 进行就地更新。因此,请检查列表中的内容listonelistone
1赞 Ayush 7/18/2021
实际上,我正在返回一个表达式,其中我正在使用您提到的方法扩展列表。我不会像这篇文章中所说的那样重新分配列表。我的表情是这样的,这个表情又回到了我身上。return list1.extend(list2)None
3赞 Andrew 1/15/2022
@Ayush extend 方法使用 listtwo 中的值更新 listone 并返回 None。你想做:listone.extend(listtwo) 后跟返回 listone
36赞 Dariusz Walczak 2/5/2013 #6

值得注意的是,该函数接受可变数量的参数:itertools.chain

>>> l1 = ['a']; l2 = ['b', 'c']; l3 = ['d', 'e', 'f']
>>> [i for i in itertools.chain(l1, l2)]
['a', 'b', 'c']
>>> [i for i in itertools.chain(l1, l2, l3)]
['a', 'b', 'c', 'd', 'e', 'f']

如果输入是可迭代对象(元组、列表、生成器等),则可以使用类方法:from_iterable

>>> il = [['a'], ['b', 'c'], ['d', 'e', 'f']]
>>> [i for i in itertools.chain.from_iterable(il)]
['a', 'b', 'c', 'd', 'e', 'f']
50赞 Amyth 3/5/2013 #7

您可以简单地使用 or 运算符,如下所示:++=

a = [1, 2, 3]
b = [4, 5, 6]

c = a + b

艺术

c = []
a = [1, 2, 3]
b = [4, 5, 6]

c += (a + b)

此外,如果您希望合并列表中的值是唯一的,您可以执行以下操作:

c = list(set(a + b))

评论

2赞 11/24/2019
最后一部分可以任意重新排序项目。如果你想保持秩序,在CPython 3.6+上你可以做到list(dict.fromkeys(a + b))
7赞 mingxiao 7/16/2013 #8

您可以使用在对象上定义的方法:append()list

mergedlist =[]
for elem in listone:
    mergedlist.append(elem)
for elem in listtwo:
    mergedlist.append(elem)

评论

10赞 Ryan Haining 7/16/2013
正如您所知,如果这是您在实践中所做的,那么这比其他建议的方法要慢得多。看 stackoverflow.com/questions/17479361/...
16赞 Mr Shark 11/8/2013 #9

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

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])

评论

1赞 cs95 6/4/2019
或者直接使用 heapq.merge
34赞 user688635 7/21/2014 #10

在 Python 3.3+ 中,您可以使用以下方面的 yield

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

def merge(l1, l2):
    yield from l1
    yield from l2

>>> list(merge(listone, listtwo))
[1, 2, 3, 4, 5, 6]

或者,如果要支持任意数量的迭代器:

def merge(*iters):
    for it in iters:
        yield from it

>>> list(merge(listone, listtwo, 'abcd', [20, 21, 22]))
[1, 2, 3, 4, 5, 6, 'a', 'b', 'c', 'd', 20, 21, 22]

评论

2赞 11/22/2019
您可以使用 itertools.chain(等效)来定义自己的函数。
23赞 jpihl 10/20/2014 #11

如果不能使用加号运算符 (),则可以使用 import:+operator

import operator

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

result = operator.add(listone, listtwo)
print(result)

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

或者,您也可以使用 dunder 函数:__add__

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

result = list.__add__(listone, listtwo)
print(result)

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

评论

4赞 Dimitris Fasarakis Hilliard 7/4/2017
抓住 dunders 通常不是最好的方法。如果不在表中,请使用 。+operator.add
4赞 cs01 6/26/2018
为什么加号运算符不可用?
2赞 jpihl 6/26/2018
通常它不会:)但是,如果您要使用 map 函数进行列表连接,或者想要将 add 函数存储在变量中,则不能使用 +。
35赞 Mazdak 7/7/2015 #12

对于列表数量较少的情况,您可以简单地将列表添加在一起或使用就地解包(在 Python-3.5+ 中可用):

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

In [2]: listone + listtwo                                                                                                                                                                                   
Out[2]: [1, 2, 3, 4, 5, 6]
                                                                                                                                                                                     
In [3]: [*listone, *listtwo]                                                                                                                                                                                
Out[3]: [1, 2, 3, 4, 5, 6]

对于列表数量较多的情况,作为更通用的方法,您可以使用模块中的 1 个函数。此外,基于这个答案,这个函数是最好的;或者至少是扁平化嵌套列表的一个非常好的方法。chain.from_iterable()itertools

>>> l=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> import itertools
>>> list(itertools.chain.from_iterable(l))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

1. 请注意,“chain.from_iterable()”在 Python 2.6 及更高版本中可用。在其他版本中,请使用 'chain(*l)'。
27赞 lavee_singh 7/7/2015 #13

如果要以排序形式合并两个列表,可以使用库中的函数。mergeheapq

from heapq import merge

a = [1, 2, 4]
b = [2, 4, 6, 7]

print list(merge(a, b))
72赞 wonder.mice 10/10/2015 #14

这个问题直接询问了如何加入两个列表。但是,即使您正在寻找一种加入许多列表的方法(包括加入零列表的情况),它在搜索中也相当高。

我认为最好的选择是使用列表推导式:

>>> a = [[1,2,3], [4,5,6], [7,8,9]]
>>> [x for xs in a for x in xs]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

您还可以创建生成器:

>>> map(str, (x for xs in a for x in xs))
['1', '2', '3', '4', '5', '6', '7', '8', '9']

旧答案

考虑以下更通用的方法:

a = [[1,2,3], [4,5,6], [7,8,9]]
reduce(lambda c, x: c + x, a, [])

将输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

请注意,当 为 或 时,这也可以正常工作。a[][[1,2,3]]

但是,这可以通过以下方法更有效地完成:itertools

a = [[1,2,3], [4,5,6], [7,8,9]]
list(itertools.chain(*a))

如果您不需要 ,而只是一个可迭代对象,请省略 .listlist()

更新

帕特里克·柯林斯(Patrick Collins)在评论中建议的替代方案也可能对您有用:

sum(a, [])

评论

7赞 Dimitris Fasarakis Hilliard 7/25/2017
Python 3 注意:现在在,所以你需要先导入它。reducefunctools
7赞 Francesco Marchetti-Stasi 11/3/2015 #15

正如许多人已经指出的那样,如果需要对两个列表应用完全相同的处理方式,那么这是要走的路。就我而言,我有一个标签和一个标志,它们从一个列表到另一个列表都不同,所以我需要稍微复杂一些的东西。事实证明,幕后只是做了以下事情:itertools.chain()itertools.chain()

for it in iterables:
    for element in it:
        yield element

(见 https://docs.python.org/2/library/itertools.html),所以我从这里汲取灵感,写了一些类似的东西:

for iterable, header, flag in ( (newList, 'New', ''), (modList, 'Modified', '-f')):
    print header + ':'
    for path in iterable:
        [...]
        command = 'cp -r' if os.path.isdir(srcPath) else 'cp'
        print >> SCRIPT , command, flag, srcPath, mergedDirPath
        [...]

这里要理解的要点是,列表只是可迭代对象的一个特例,迭代对象与其他对象一样;Python 中的循环可以处理元组变量,因此同时循环多个变量很简单。for ... in

638赞 Dimitris Fasarakis Hilliard 2/25/2016 #16

Python >= 3.5 替代方案:[*l1, *l2]

值得一提的是,通过接受 PEP 448 引入了另一种替代方案。

PEP 的标题为 Additional Unpacking Generalizations,在 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 系列中的先前版本。在不受支持的版本中,将引发 a。SyntaxError

与其他方法一样,这也创建了相应列表中元素的浅拷贝


这种方法的好处是,你真的不需要列表来执行它;任何可迭代的东西都可以。如PEP所述:

这也是一种更具可读性的方法,可以将可迭代对象求和 列表,例如现在 等同于 just .my_list + list(my_tuple) + list(my_range)[*my_list, *my_tuple, *my_range]

因此,虽然添加 with 会由于类型不匹配而引发:+TypeError

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

以下不会:

res = [*l, *r]

因为它将首先解压缩可迭代对象的内容,然后简单地从内容中创建一个。list

评论

23赞 alan 4/10/2019
处理可迭代类型的解包方法的一个很好的例子是,在您连接的某个列表上返回迭代器的函数。例如,您可以反转要连接的列表之一:.由于返回迭代器,因此会引发错误。res = [*l1, *reversed(l2)]reversedres = l1 + reversed(l2)
13赞 Kevin S 5/9/2019
值得注意的是,这类似于在 python 中组合字典。dict3 = {**dict1, **dict2}。请注意,我们使用 ** 来解压缩字典,而对于列表,我们使用 * 来解压缩。
8赞 Marcello Romani 2/25/2021
我心中的语法 nazy 必须指出: *词典
1赞 1/31/2022
@KevinS 这仅适用于字符串键,因为语法仅支持字符串键。**
2赞 AlexandreBorowczyk 4/15/2022
很有意思。您知道这种方法与添加相比性能如何吗?
8赞 SuperNova 7/7/2016 #17
list(set(listone) | set(listtwo))

上面的代码不保留顺序,并从每个列表中删除重复项(但不从串联列表中删除)。

11赞 JamesVeug 2/16/2018 #18

我能找到的所有加入列表的可能方法

import itertools

A = [1,3,5,7,9] + [2,4,6,8,10]

B = [1,3,5,7,9]
B.append([2,4,6,8,10])

C = [1,3,5,7,9]
C.extend([2,4,6,8,10])

D = list(zip([1,3,5,7,9],[2,4,6,8,10]))
E = [1,3,5,7,9]+[2,4,6,8,10]
F = list(set([1,3,5,7,9] + [2,4,6,8,10]))

G = []
for a in itertools.chain([1,3,5,7,9], [2,4,6,8,10]):
    G.append(a)


print("A: " + str(A))
print("B: " + str(B))
print("C: " + str(C))
print("D: " + str(D))
print("E: " + str(E))
print("F: " + str(F))
print("G: " + str(G))

输出

A: [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
B: [1, 3, 5, 7, 9, [2, 4, 6, 8, 10]]
C: [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
D: [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
E: [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
F: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
G: [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
5赞 Akash Singh 3/27/2018 #19

合并列表的一个非常简洁的方法是

list_of_lists = [[1,2,3], [4,5,6], [7,8,9]]
reduce(list.__add__, list_of_lists)

这给了我们

[1, 2, 3, 4, 5, 6, 7, 8, 9]

评论

1赞 cs95 6/4/2019
请不要使用,请改用。这是更冗长的等价物,同样糟糕。请勿使用!list.__add__operator.addsum(list_of_lists, [])
0赞 Akash Singh 6/7/2019
@cs95你能用list.__add__来解释问题所在吗
1赞 cs95 6/7/2019
dunder 方法是“私有方法”,通常不应直接使用(它们由其他函数调用)。例外情况是 和 。obj.__class__obj.__dict__
0赞 mirekphd 9/24/2021
如果看起来太低级和不稳定(容易改变),你可以改用。__add__np.union1d
11赞 z33k 6/4/2018 #20

使用简单的列表推导式:

joined_list = [item for list_ in [list_one, list_two] for item in list_]

它具有使用附加解包泛化的最新方法的所有优点 - 即您可以以这种方式连接任意数量的不同可迭代对象(例如,列表、元组、范围和生成器) - 并且不限于 Python 3.5 或更高版本。

11赞 Michael Grossmann 8/5/2018 #21

如果您使用的是 NumPy,则可以使用以下命令连接两个兼容维度的数组:

numpy.concatenate([a,b])

评论

1赞 Aaron John Sabu 2/4/2021
@cs95它也不会“不要求”numpy。我应该说这实际上帮助了我,因为加号运算符不适用于我的应用程序
4赞 Vishvajit Pathak 8/25/2018 #22

所以有两种简单的方法。

  1. 使用 +:它从提供的列表创建一个新列表

例:

In [1]: a = [1, 2, 3]

In [2]: b = [4, 5, 6]

In [3]: a + b
Out[3]: [1, 2, 3, 4, 5, 6]

In [4]: %timeit a + b
10000000 loops, best of 3: 126 ns per loop
  1. 使用扩展:它将新列表附加到现有列表。这意味着它不会创建单独的列表。

例:

In [1]: a = [1, 2, 3]

In [2]: b = [4, 5, 6]

In [3]: %timeit a.extend(b)
10000000 loops, best of 3: 91.1 ns per loop

因此,我们看到,在两种最流行的方法中,它是有效的。extend

评论

2赞 Tweakimp 3/12/2019
如果我需要添加多个列表,例如 a+b+c+d+e,该怎么办?
2赞 cs95 6/4/2019
@Tweakimp 请参阅此答案,其中有几个选项(我建议)。chain.from_iterable
348赞 cs95 6/1/2019 #23

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

从 3.9 开始,这些是 Python 中用于连接两个(或更多)列表的最流行的 stdlib 方法。

版本限制 就地? 概括?*
a + b - sum(list_of_lists, [])1
list(chain(a, b))2 >=2.3 list(chain(*list_of_lists))
[*a, *b]3 >=3.5
a += b - 是的
a.extend(b) - 是的

* 如果一个解决方案适用于未知数量的列表(例如,在循环或列表推导中),则该解决方案将有资格成为广义解决方案

脚注

  1. 这是一个巧妙的解决方案,因为它简洁明了。但以成对方式执行串联,这意味着这是一个 二次运算,因为必须为每个步骤分配内存。做 如果您的列表很大,则不要使用。sum

  2. 请参阅文档中的chain.from_iterable。您需要先。 串联在内存中是线性的,因此这在以下方面是最好的 性能和版本兼容性。 在 2.6 中引入。from itertools import chainchain.from_iterable

  3. 此方法使用附加解包概化 (PEP 448),但不能 推广到 N 个列表,除非您自己手动解压缩每个列表。

  4. a += b并且对于所有实际目的或多或少是等效的。 当对列表调用时,将在内部调用 ,这将第一个列表扩展第二个列表。a.extend(b)+=list.__iadd__


性能

2-列表串联1

enter image description here

这些方法之间没有太大区别,但这是有道理的,因为它们都具有相同的复杂度顺序(线性)。除了风格问题之外,没有特别的理由偏爱一个而不是另一个。

N 列表串联

enter image description here

绘图是使用 perfplot 模块生成的。代码,供您参考。

1. iadd+=) 和 extend 方法就地运行,因此每次测试前都必须生成一个副本。为了公平起见,所有方法都有一个可以忽略的左侧列表的预复制步骤。


对其他解决方案的评论

  • 请勿以任何方式、形状或形式直接使用 DUNDER 方法。事实上,要远离 dunder 方法,并使用它们设计的运算符和函数。Python 在这些语义中加入了谨慎的语义,这比直接调用 dunder 要复杂得多。下面是一个示例。所以,总而言之,=> BAD; => 好。list.__add__operatora.__add__(b)a + b

  • 这里的一些答案提供了成对串联 - 这与更冗长的相同。reduce(operator.add, [a, b])sum([a, b], [])

  • 使用的任何方法都会删除重复项并丢失排序。请谨慎使用。set

  • for i in b: a.append(i)比 更啰嗦,速度更慢,是单函数调用,更惯用。 由于为列表分配和增长内存的语义,因此速度较慢。有关类似的讨论,请参阅此处a.extend(b)append

  • heapq.merge将起作用,但它的用例是用于在线性时间内合并排序列表。在任何其他情况下使用它都是一种反模式。

  • yield从函数中列出元素是一种可接受的方法,但这样做更快更好(它在 C 中有一个代码路径,所以它很快)。chain

  • operator.add(a, b)是可接受的等效函数。它的用例主要用于动态方法调度。否则,在我看来,更喜欢更短、更易读的。YMMV。a + ba + b

评论

0赞 endolith 8/21/2019
stackoverflow.com/q/36863404/125507 的答案可以使用 perfplot 图(包括 numba 解决方案)
0赞 cs95 8/22/2019
@endolith有点忙于工作,但我会看看,看看我是否可以参与进来。维基
2赞 GD- Ganesh Deshmukh 5/19/2020
哪种方法最好,那么性能明智,更快?请告诉。
3赞 cs95 5/20/2020
@ganeshdeshmukh TL;DR 是它们都很好,你选择哪一个主要是风格问题。“ 我的回答中未列出的解决方案,或在”评论“中未列出的解决方案,我建议不要使用。"There's not much difference between these methods but that makes sense given they all have the same order of complexity (linear). There's no particular reason to prefer one over the other except as a matter of style.
0赞 mousetail 9/21/2022
@cs95我对表格进行了一些重大更正。如果您不同意,可以恢复
7赞 Code Carbonate 7/7/2020 #24
 a = [1, 2, 3]
 b = [4, 5, 6]
     
 c = a + b
 print(c)

输出

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

在上面的代码中,“+”运算符用于将两个列表连接成一个列表。

另一种解决方案

 a = [1, 2, 3]
 b = [4, 5, 6]
 c = [] # Empty list in which we are going to append the values of list (a) and (b)

 for i in a:
     c.append(i)
 for j in b:
     c.append(j)

 print(c)

输出

>>> [1, 2, 3, 4, 5, 6]
3赞 Satyajit 11/14/2020 #25

我假设你想要两种方法之一:

保留重复的元素

这很容易。只需像字符串一样连接:

def concat_list(l1,l2):
    l3 = l1+l2
    return l3

接下来,如果要消除重复元素

def concat_list(l1,l2):
   l3 = []
   for i in [l1,l2]:
     for j in i:
       if j not in l3:
         # Check if element exists in final list, if no then add element to list
         l3.append(j)
   return l3
-10赞 mr potato head 1/17/2021 #26

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

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

从本质上讲,它是删除两个列表中的每个重复项之一。由于您的列表没有任何重复项,因此它只返回两个列表的串联版本。

评论

3赞 maczos 1/22/2021
union不适用于列表,您可以将其与 sets 或 dict 一起使用
2赞 mr potato head 1/23/2021
哦,是的,对不起,我好久没用了,不好
9赞 surya 6/2/2021 #27

另一种方式:

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

评论

3赞 Konchog 2/10/2022
[*a, *b] 如何改进 a + b?
4赞 U13-Forward 9/12/2021 #28

您也可以只使用总和

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> sum([a, b], [])
[1, 2, 3, 4, 5, 6]
>>>

这适用于任何长度和任何元素类型的列表:

>>> a = ['a', 'b', 'c', 'd']
>>> b = [1, 2, 3, 4]
>>> c = [1, 2]
>>> sum([a, b, c], [])
['a', 'b', 'c', 'd', 1, 2, 3, 4, 1, 2]
>>>

我添加 的原因是该参数默认设置为,因此它会遍历列表并添加到 ,但会给出错误,因此如果我们将 设置为 .它将添加到 中,并按预期工作。[]start0start0 + [1, 2, 3]start[][][] + [1, 2, 3]

6赞 Dilshan Madhuranga 10/3/2021 #29

我推荐三种方法来连接列表,但最推荐第一种方法,

# Easiest and least complexity method <= recommended

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

newlist = listone + listtwo
print(newlist)

# Second-easiest method
newlist = listone.copy()
newlist.extend(listtwo)
print(newlist)

在第二种方法中,我分配给 的副本,因为我不想更改 。newlistlistonelistone

# Third method
newlist = listone.copy()
for j in listtwo:
    newlist.append(j)

print(newlist)

这不是连接列表的好方法,因为我们使用 for 循环来连接列表。因此,时间复杂度远高于其他两种方法。

1赞 Khan 11/2/2021 #30

提供的解决方案适用于单个列表。如果列表中有列表并且需要合并相应的列表,则通过 for 循环的“+”操作可以完成工作。

a = [[1,2,3], [4,5,6]]

b = [[0,1,2], [7,8,9]]

for i in range(len(a)):
    cc.append(a[i] + b[i])

输出: [[1, 2, 3, 0, 1, 2], [4, 5, 6, 7, 8, 9]]

6赞 Franz Gastring 12/30/2021 #31

用于连接列表的最常用方法是加号运算符和内置方法 append,例如:

list = [1,2]

list = list + [3]
# list = [1,2,3]

list.append(3)
# list = [1,2,3]

list.append([3,4])
# list = [1,2,[3,4]]

在大多数情况下,这将起作用,但如果添加了列表,append 函数将不会扩展列表。由于这不是预期的,因此可以使用另一种名为 extend 的方法。它应该适用于以下结构:

list = [1,2]
list.extend([3,4])
# list = [1,2,3,4]