在Python中建立N维数组并赋初值

时间:2022-11-13 06:10:40

在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!指定每一维数组的长度时出错