如何在 Python 中串联两个或多个列表
一个Python 列表是一种数据结构,是具有元素的有序集合。
将两个列表连接在一起的操作称为串联。你可以串联两个列表就地 - in-place
或非就地。
假设我们有两个要串联的列表,
list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
我们可以有多种方法来串联它们,但是当长度增加或串联列表的数量增加时,它们的性能会有所不同。
我们将介绍这些不同的方法,并为你提供性能比较。
+
列表串联方法
+
运算符可以连接两个列表并返回一个新列表。
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> result = list1 + list2
>>> result
[1, 2, 3, 4, 5, 6, 7, 8]
+=
串联方法
+=
与上述方法类似,但是它将在列表就位之前更改列表中的数据。
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> list1 += list2
>>> list1
[1, 2, 3, 4, 5, 6, 7, 8]
itertools.chain
方法
itertools
模块中的 chain
将连续序列视为一个序列,
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> import itertools
>>> result = list(itertools.chain(list1, list2))
[1, 2, 3, 4, 5, 6, 7, 8]
itertools.chain
有一个备用构造函数- intertools.chain.from_iterable()
。它有一个可迭代的参数,其输入是被懒惰评估的。extend()
方法
Python 列表 extend
方法通过附加来自可迭代对象的元素来扩展列表。
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> list1.extend(list2)
>>> list1
[1, 2, 3, 4, 5, 6, 7, 8]
它还会就地更改现有列表的数据,而不是返回新列表。
[*a, *b]
unpack
方法
如 PEP-0448 中所述,从 Python 3.5 扩展了诸如*
可迭代 unpack
运算符和**
字典 unpack
运算符之类的 unpack
方法。
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> result = [*list1, list2]
>>> result
[1, 2, 3, 4, 5, 6, 7, 8]
除非你要手动解压缩每个列表,否则此方法不适用于 N 个列表的情况。
>>> A = [1,2,3]
>>> B = [4,5,6]
>>> C = [7,8,9]
>>> [*t for t in [A,B,C]]
SyntaxError: iterable unpacking cannot be used in comprehension
结论
版本 | in-place ? |
|
---|---|---|
a + b |
– | No |
list(intertools.chain(a,b)) |
>= 2.3 | No |
[*a, *b] |
>= 3.5 | No |
a += b |
– | Yes |
a.extend(b) |
– | Yes |
我们使用 perfplot
模块来比较上述方法的性能。
正如图表所示,a.extend(b)
和 a+b
方法几乎是相同的性能,并在所有的方法中是最好的。list(chain(a,b))
方法的性能最差。
Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.
GitHub