Python二维数组输出

Rav*_*dra -1 python python-2.7

我刚开始学习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 ""
Run Code Online (Sandbox Code Playgroud)

为什么这个程序打印

2 3 4
2 3 4
2 3 4
Run Code Online (Sandbox Code Playgroud)

而不是我的期望

0 1 2
1 2 3
2 3 4
Run Code Online (Sandbox Code Playgroud)

我想到了这个的原因,我无法做出任何结论.这与参考变量有关吗?

Bha*_*Rao 5

让我们来看看第一个陈述

>>> x = [0]
>>> id(x)
139705127800200
>>> id(x[0])
40157552
Run Code Online (Sandbox Code Playgroud)

记下这个id 40157552.现在,当我们将它乘以3.你可以看到其他人的地址

>>> y = x*3
>>> for i in y:
...     print id(i)
... 
40157552
40157552
40157552
>>> y
[0, 0, 0]
Run Code Online (Sandbox Code Playgroud)

所有人都有相同的身份证40157552.所以这就是你无法获得正确输出的原因.

像已经提到您可以创建二维数组或者你可以尝试该模块numpy通过

numpy.zeros((3,3)).
Run Code Online (Sandbox Code Playgroud)

这将创建您想要的确切数组.

现在进行一个小型演示

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 ""
Run Code Online (Sandbox Code Playgroud)

这将打印

0 1 2 
1 2 3 
2 3 4 
Run Code Online (Sandbox Code Playgroud)

正如所料.