我刚开始学习python。我来自C ++ / Java背景。要理解二维数组。我写了以下代码段
x = [[0]*3]*3
for i in range(0,3):
for j in range(0,3):
x[i][j] = i+j
for i in range(0,3):
for j in range(0,3):
print x[i][j],
print ""
为什么要打印此程序
2 3 4
2 3 4
2 3 4
而不是我的期望
0 1 2
1 2 3
2 3 4
我想到了这个的原因,我无法做出任何结论。这与参考变量有关吗?
答案 0 :(得分:5)
让我们来看看第一个声明
>>> x = [0]
>>> id(x)
139705127800200
>>> id(x[0])
40157552
记下此ID 40157552
。现在我们将它乘以3.你可以看到其他人的地址
>>> y = x*3
>>> for i in y:
... print id(i)
...
40157552
40157552
40157552
>>> y
[0, 0, 0]
所有人都有相同的身份40157552
。所以这就是你无法获得正确输出的原因。
您可以像已经提到的那样创建2d数组,或者可以通过
尝试模块numpy
numpy.zeros((3,3)).
这会创建您想要的确切数组。
现在进行一个小型演示
x = [[0 for i in range(3)] for j in range(3)]
for i in range(0,3):
for j in range(0,3):
x[i][j] = i+j
for i in range(0,3):
for j in range(0,3):
print x[i][j],
print ""
这将打印
0 1 2
1 2 3
2 3 4
正如所料。
答案 1 :(得分:4)
你不应该在3上创建一个包含多个3d数组的3d数组,因为实际上你创建了3个对一个对象的引用。而是使用以下内容:
x = [[0 for i in range(3)] for j in range(3)]