4

可能重复:
如何在 Python 中初始化二维数组?

在解决一个关于二维数组的简单问题时,我在这个站点上遇到了一个解决方案,该解决方案解释了如何使用重载运算符在 Python 中声明一个。

例子:

Myarray = [[0]*3]*3

这将产生以下数组(列表)

[[0,0,0],[0,0,0],[0,0,0]]

在您使用它之前,这似乎很好:

例如,如果您分配一个元素:

Myarray [0][0] = 1

你会得到意想不到的输出:

[[1,0, 0],[1,0,0] , [1,0,0]]

实际上同时分配 Myarray [1][0] 和 Myarray[2][0]

我的解决方案:

Myarray = [[][][]]
for i in range(0,3):
  for j in range (0,3):
     Myarray[i].append(0)

此解决方案按预期工作:

Marray[0][1] = 1

给你

[[1,0, 0],[0,0,0] , [0,0,0]]

有没有更简单的方法来做到这一点?这是一个 A 级剑桥问题的解决方案,与其他语言相比,对学生来说似乎太啰嗦了。

4

1 回答 1

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]]

与您在示例中显示的相乘列表不同,它具有所需的行为

>>> m[1][0] = 99
>>> m
[[0, 0, 0], [99, 0, 0], [0, 0, 0]]

但是,为了认真使用多维数组和/或数值编程,我建议您使用Numpy数组。

于 2012-11-09T00:01:11.447 回答