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)
我想到了这个的原因,我无法做出任何结论.这与参考变量有关吗?
让我们来看看第一个陈述
>>> 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)
正如所料.
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |