HOWTO · Python

用 Python 將多個元素新增到列表中

我們可以通過手動新增值將多個元素追加到列表中,也可以使用 append()、extend()、concatenation 和 itertools 方法。

本頁內容

若要將可迭代物件中的值加入既有的 Python 列表,請使用 extend() 方法。它會就地修改該列表。append() 方法每次呼叫會加入一個物件;使用 +,或將 itertools.chain 的結果傳給 list(),則會建立新列表。切片指定也能在指定位置插入值。

請依照是否要修改列表、新值應放在哪裡,以及是否需要新的結果來選擇方法。以下範例會展示各種方法的行為。

使用 append() 新增一個項目

append() 是列表方法,會將引數作為單一物件加到列表末尾。如果引數本身是列表,該列表仍會作為一個巢狀元素加入。重複呼叫 append() 時,每次呼叫都會新增一個物件。

執行此範例:

本節中的程式碼以及顯示的標籤或輸出仍為英文。

values = ["red", "blue"]
values.append("green")
print(values)

若要加入數個分開的值,可以為每個值各呼叫一次 append()。若要加入可迭代物件中的多個值,通常直接使用 extend() 更簡便。

使用 extend() 新增多個項目

extend() 會取用可迭代物件,並將它產生的每個值附加到既有列表。列表本身會被修改,而且此方法會回傳 None;請繼續使用原本的列表變數,不要將方法的回傳值指定給變數。

本節中的程式碼以及顯示的標籤或輸出仍為英文。

colors = ["red", "blue"]
colors.extend(["green", "yellow"])
print(colors)

這也適用於其他可迭代物件,例如元組或字串。字串會一次產生一個字元,因此使用 "hi" 延伸列表時,會分別加入 "h" 和 "i"。若要將可迭代物件本身作為單一物件存入列表,請使用 append()。

使用切片指定插入多個項目

切片指定會以可迭代物件中的值取代列表中選取的部分。空切片不會選取任何既有值,因此指定值時會插入新值並保留其餘內容。索引會決定新值出現的位置。

本節中的程式碼以及顯示的標籤或輸出仍為英文。

items = ["a", "d"]
items[1:1] = ["b", "c"]
print(items)

此處切片的起點和終點都是索引 1,因此兩個新值會放在原有的 "d" 前面。非空切片會改為取代其中選取的值;若要插入而非取代,請確認切片的起訖範圍。

使用 + 合併列表

+ 運算子會串接列表並回傳新列表,不會修改任一運算元。若要保留原列表的內容不變,這種方式就很適合。

本節中的程式碼以及顯示的標籤或輸出仍為英文。

first = [1, 2]
second = [3, 4]
combined = first + second
print(combined)

列表串接的兩個運算元都必須是列表。若要將值加入某個既有列表,請使用 extend(),而不是建立串接結果再將它指定給變數。

使用 itertools.chain 從可迭代物件建立列表

itertools.chain 會產生一個迭代器,依序產生輸入可迭代物件中的值。需要將這些值具體化為新列表時,請將它傳給 list()。輸入本身已是可迭代物件,或需要依序走訪多個來源時,這種方式很實用;它不會修改那些來源。效能取決於周邊工作與資料,因此沒有一種方法在所有情況下都比其他選項更有效率。

本節中的程式碼以及顯示的標籤或輸出仍為英文。

from itertools import chain

numbers = [1, 2]
more_numbers = (3, 4)
combined = list(chain(numbers, more_numbers))
print(combined)

也可以在迴圈中直接取用迭代器,而不必建立列表。只有在需要列表結果時,才將它具體化。

選擇合適的方法

  • 若要新增一個物件,或逐一處理各值並分別加入,請使用 append()。
  • 若要將可迭代物件中的每個值加入既有列表,請使用 extend()。
  • 若要在指定位置插入可迭代物件中的值,請使用切片指定;空切片可以插入值而不取代既有內容。
  • 若要用兩個列表建立新列表,同時保留輸入列表不變,請使用 +。
  • 若要根據多個可迭代物件產生的值建立新列表,請使用 list(itertools.chain(...))。若迭代器已足夠,就省略 list()。

若要將多個值加入已存在的列表,通常可先考慮 extend()。需要在索引位置插入、取得獨立的串接結果,或取得由多個來源產生的迭代器時,再選擇相應的方法。