如何在 Python 中串聯兩個或多個列表

  1. + 列表串聯方法
  2. += 串聯方法
  3. itertools.chain 方法
  4. extend() 方法
  5. [*a, *b] unpack 方法
  6. 結論

一個 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]
Information

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 個列表的情況。

Warning

迭代解壓縮不能用於理解,如下所述。

>>> 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 模組比較上述方法的效能

Python 列表串聯方法效能比較

正如圖表所示,a.extend(b)a+b 方法幾乎是相同的效能,並在所有的方法中是最好的。list(chain(a,b)) 方法的效能最差。

相關文章 - Python List

  • Python 列表方法 append 和 extend 之間有什麼區別
  • 如何在 Python 中將列表轉換為字串
  • 在 Python 列表中的 del、remove 和 pop 方法區別的介紹
  • 如何快速檢查 Python 列表中是否存在特定值
  • 如何在 Python 中刪除列表中的重複資料
  • 如何在 Python 中扁平化列表
  • 如何在 Python 中建立具有特定大小的列表
  • comments powered by Disqus