我想定义一个没有初始化长度的二维数组,如下所示:
Matrix = [][]
但这给出了一个错误:
IndexError:列表索引超出范围
我想定义一个没有初始化长度的二维数组,如下所示:
Matrix = [][]
但这给出了一个错误:
IndexError:列表索引超出范围
当前回答
Use:
import copy
def ndlist(*args, init=0):
dp = init
for x in reversed(args):
dp = [copy.deepcopy(dp) for _ in range(x)]
return dp
l = ndlist(1,2,3,4) # 4 dimensional list initialized with 0's
l[0][1][2][3] = 1
我认为NumPy是最好的选择。如果您不想使用NumPy,上面是一个通用的。
其他回答
如果您希望能够将其视为2D阵列,而不是被迫根据列表进行思考(在我看来更自然),可以执行以下操作:
import numpy
Nx=3; Ny=4
my2Dlist= numpy.zeros((Nx,Ny)).tolist()
结果是一个列表(不是NumPy数组),您可以用数字、字符串等覆盖各个位置。
# Creates a list containing 5 lists initialized to 0
Matrix = [[0]*5]*5
注意这个简短的表达,请参见@F.J的答案中的完整解释
这就是词典的用途!
matrix = {}
可以通过两种方式定义键和值:
matrix[0,0] = value
or
matrix = { (0,0) : value }
结果:
[ value, value, value, value, value],
[ value, value, value, value, value],
...
下面是在python中创建矩阵的代码片段:
# get the input rows and cols
rows = int(input("rows : "))
cols = int(input("Cols : "))
# initialize the list
l=[[0]*cols for i in range(rows)]
# fill some random values in it
for i in range(0,rows):
for j in range(0,cols):
l[i][j] = i+j
# print the list
for i in range(0,rows):
print()
for j in range(0,cols):
print(l[i][j],end=" ")
如果我错过了什么,请提出建议。
这就是我通常在python中创建2D数组的方式。
col = 3
row = 4
array = [[0] * col for _ in range(row)]
与在列表理解中使用两个for循环相比,我发现这种语法很容易记住。