在Python中,由於不像C++/Java這樣的語言可以方便的用a[i][j]=0的方式,建立二維數組並賦初值,所以需要一個相對巧妙的方法。
可以用列表解析的方式,eg:
>>> mat=[[0 for i in range(5)] for j in range(5)] >>> mat [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
這樣就建立了一個二維5X5的數組並把初值設置為0.
下面給一個建立MXN的二維數組,並把初值設為x的函數:
def Get_MXN_Array_initx(m,n,x): return [[x for i in range(m)] for j in range(n)]
如果要建立三維數組可以用類似的方式,以下是一個函數,建立多維的,每一維長度都可以指定,所有元素初始值為x的數組。
參數:m為整數,表示數組的維度;n為數組,儲存每一維數組的長度
感謝dearchi指出下列代碼中的錯誤,已改正。
原理:在使用低維數組生成高維數組的過程中,確實應當使用deepcopy復制低維數組,不然會導致高維數組中的每個元素實際上都是同一個低維數組,當有一個低維數組被修改,高維數組中的其他低維數組也跟着被修改了,即“牽一發而動全身”。詳見dearchi的評論。
import copy
def Get_Mdimensions_NlengthArray_initValuex(m,n,x): if m!=len(n): print("Error!指定每一維數組的長度時出錯") else: result=[x for i in range(n[-1])] dimensions_num=1 while dimensions_num<m: result=[copy.deepcopy(result) for i in range(n[-1-dimensions_num])] dimensions_num+=1 return result
eg:我們創建一個2維,3X2,初始值為0的數組,各維度的長度以數組的形式傳入參數n:
>>> Arr=Get_Mdimensions_NlengthArray_initValuex2(2,[3,2],0) >>> Arr [[0, 0], [0, 0], [0, 0]]
當傳入維度數組的長度與數組維度不匹配時:
>>> Arr=Get_Mdimensions_NlengthArray_initValuex2(2,[3,2,3],0)
Error!指定每一維數組的長度時出錯
