HOWTO · Python

在 Python 中建立零的列表

本教學示範如何在 Python 中產生一個包含零的清單。教學探討了多種方法,例如清單推導式、乘法運算子以及使用 numpy 函式庫。無論您是初學者還是經驗豐富的程式設計師,本指南都提供了清晰的程式碼範例和說明,協助您有效率地為專案建立零清單。

本頁內容

若要建立包含 n 個零的 Python 清單,請使用 [0] * n。例如,[0] * 5 會建立含有五個整數零的清單。當所需長度已知,且每個項目的值都相同時,這是最清楚的做法。以下範例都使用 n = 5,方便直接比較不同方法。

使用清單乘法建立固定長度的零清單

清單乘法會重複左側清單中的項目。由於 [0] 含有一個整數,將它乘以 n 就會產生 n 個整數零:

n = 5
zeros = [0] * n

結果是一個新清單。計數為零時會得到 [];計數為負數時也會得到 [],因為 Python 對非正的重複次數會將序列重複零次。在這個範例中,重複的值是整數,因此可以分別重新指定清單中的各個位置。若重複的是巢狀清單等可變物件,每個位置都會指向同一個物件;若需要建立彼此獨立的物件,請改用清單推導式。

使用清單推導式建立零清單

清單推導式會針對可疊代物件中的每個項目,計算一次其中的運算式。此處的 range(n) 會提供五次疊代,而 _ 是一個名稱,用來代表運算式不需要使用的迴圈值。列表推導式指的就是這種方括號括住的運算式:

n = 5
zeros = [0 for _ in range(n)]

當每次疊代都要計算值,或你希望清楚呈現產生規則時,可以使用這種寫法。由於此處不會用到迴圈值,慣例上會以 _ 作為名稱;它在 Python 中沒有特殊行為。若每個元素都要依疊代值計算,可以將 0 換成相依於該值的運算式。

需要自訂邏輯來建立各項值時,使用迴圈

若建立每個項目需要執行多個陳述式、判斷條件或其他操作,明確的迴圈會很有用。每次疊代時附加一個值:

n = 5
zeros = []
for _ in range(n):
    zeros.append(0)

這會產生與乘法和清單推導式範例相同類型的內建清單。若只是重複整數,前述兩種寫法更精簡;當迴圈本體能讓每個項目的處理過程更容易理解時,再使用迴圈。在實際程式中,可將 append(0) 陳述式換成計算或準備各項值所需的操作。

使用 itertools.repeat() 重複零值

itertools.repeat() 會重複提供相同的物件。傳入要重複的值和次數;若呼叫端需要清單,再將它提供的迭代器傳給 list():

from itertools import repeat

n = 5
zeros = list(repeat(0, n))

當直接使用迭代器很方便,或重複值迭代器能配合較大的操作時,這個方法很實用。呼叫 list(...) 會取用迭代器並將五個值全部存入記憶體,因此若要的結果本來就是清單,通常使用 [0] * n 更簡單。

需要數值陣列時使用 NumPy

若要進行使用 NumPy 操作的數值運算,numpy.zeros(n) 會建立包含 n 個零值元素的 NumPy 陣列。例如,安裝 NumPy 後,執行 import numpy as np,再執行 zeros = np.zeros(5),就會建立一個陣列。結果是 ndarray,而不是 Python 內建清單;只有在程式的其他部分明確需要清單時,才用 zeros.tolist() 將它轉換成清單。NumPy 是額外的相依套件,適合需要其陣列操作、形狀或資料型別的情況。若只需要一般清單,使用 [0] * n 即可,無須增加相依套件。

簡單的固定長度清單可用乘法;要逐項計算運算式時可用清單推導式;需要自訂步驟時可用迴圈;適合直接使用迭代器時可用 itertools.repeat();若預期的資料結構是陣列,則可使用 NumPy。