可能重复:
如何在Python中初始化二维数组?
在解决关于二维数组的一个简单问题时,我遇到了一个解决方案,该解决方案解释了如何使用重载运算符在Python中声明一个解决方案.
例:
Myarray = [[0]*3]*3
Run Code Online (Sandbox Code Playgroud)
这会产生以下数组(列表)
[[0,0,0],[0,0,0],[0,0,0]]
Run Code Online (Sandbox Code Playgroud)
在您使用之前,这似乎很好:
如果您分配一个元素,例如:
Myarray [0][0] = 1
Run Code Online (Sandbox Code Playgroud)
你得到意想不到的输出:
[[1,0, 0],[1,0,0] , [1,0,0]]
Run Code Online (Sandbox Code Playgroud)
实际上同时分配了Myarray [1] [0]和Myarray [2] [0]
我的解决方案
Myarray = [[][][]]
for i in range(0,3):
for j in range (0,3):
Myarray[i].append(0)
Run Code Online (Sandbox Code Playgroud)
此解决方案按预期工作:
Marray[0][1] = 1
Run Code Online (Sandbox Code Playgroud)
给你
[[1,0, 0],[0,0,0] , [0,0,0]]
Run Code Online (Sandbox Code Playgroud)
有更简单的方法吗?这是一个A级剑桥问题的解决方案,与其他语言相比,对学生来说似乎太长了.
使用vanilla Python,你可以使用这个嵌套列表理解
>>> m = [[0 for y in range(3)] for x in range(3)]
>>> m
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)
与您在示例中显示的乘法列表不同,它具有所需的行为
>>> m[1][0] = 99
>>> m
[[0, 0, 0], [99, 0, 0], [0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)
但是,为了认真使用多维数组和/或数值编程,我建议你使用Numpy数组.