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()。需要在索引位置插入、取得獨立的串接結果,或取得由多個來源產生的迭代器時,再選擇相應的方法。