HOWTO · Python

如何在 Python 中宣告 3D 陣列

有 3 種主要方法可用於在 Python 中宣告 3D 陣列:列表推導式、乘法方法和 numpy 庫。

本頁內容

Python 中的三維結構可以是巢狀列表或 NumPy 的 ndarray。對獨立的 Python 列表使用巢狀列表推導式;僅當共享參照可以接受時才使用列表乘法;數值陣列運算則使用 NumPy。

在 Python 中使用列表推導式宣告 3D 列表

巢狀列表推導式會建立普通的 Python 列表,在每一層都建立一個新的內層列表。下面的列表推導式語法會建立一個以零填充、形狀為 2 × 2 × 2 的結構:兩個外層項目,每個項目包含兩列、每列兩個值。

執行此範例:

n = 2
distance = [[[0 for k in range(n)] for j in range(n)] for i in range(n)]

print(distance)
print((len(distance), len(distance[0]), len(distance[0][0])))

三個巢狀迴圈對應三個維度。變更 n,或為每個 range 使用不同的大小,即可建立非立方體的形狀。

在 Python 中使用乘法方法宣告 3D 列表

* 運算子會重複一個列表,但不會遞迴複製其中的列表。在下面的表示式中,重複的位置參照的是相同的內層列表。因此,更新一個位置可能會改變共用該列表的其他位置:

n = 2
distance = [[[0] * n] * n] * n
distance[0][0][0] = 7
print(distance)

對於獨立的巢狀列表,請在每一層使用推導式,例如 [[[0] * n for _ in range(n)] for _ in range(n)]。乘法適用於重複不可變的值,或有意共用參照的情況;對於可變的巢狀資料,它與推導式並不等價。

在 Python 中使用 NumPy 庫宣告 3D 陣列

當您需要 ndarray 以及對其各軸進行數值運算時,請使用 NumPy。它是一個外部庫;執行此範例之前,請先在您的專案所使用的 Python 環境中以 pip install numpy 安裝。形狀元組給出每個軸的大小,np.zeros 會用零填充陣列。其預設 dtype 為 float。

try:
    import numpy as np
except ImportError:
    print("NumPy is not installed in this Python environment.")
else:
    new_array = np.zeros((2, 2, 2))
    print(new_array.shape)
    print(new_array.dtype)

NumPy 陣列的顯示值格式與巢狀列表不同,但維度與零初始化都是由傳給 np.zeros 的形狀決定的。若要整數零,請傳入 dtype=int,例如 np.zeros((2, 2, 2), dtype=int)。詳情請參閱 NumPy 概述和 np.zeros 參考。