Python多维数组

Tim*_*man 4 python

可能重复:
如何在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级剑桥问题的解决方案,与其他语言相比,对学生来说似乎太长了.

Jun*_*uxx 6

使用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数组.

  • 更好的是:[[0]*3 for x in range(3)] (2认同)