Python二维数组输出

时间:2014-12-31 19:05:01

标签: 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 ""

为什么要打印此程序

2 3 4
2 3 4
2 3 4

而不是我的期望

0 1 2
1 2 3
2 3 4

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

2 个答案:

答案 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)]