我想创建一个2D数组,如下所示:
grid[y][x]
这样就有y行数和x列数。
下面是我这样做的方式,但是当我尝试将数组的(0,0)分配为包含值'2'时,代码将每个子数组的第一个值分配给'2'。
为什么会这样?我应该如何pythonically实例化2D数组?
n = 4
x=0
y=0
grid = [[None]*n]*n
print grid
grid[y][x]='Here'
print grid
答案 0 :(得分:2)
当您使用*
创建多个引用时,它不会复制数据
所以当你修改第一行
[here,none,none,none]
你实际上改变了所有的行。
溶液
[[None for i in range(n)] for j in range(n)]
编辑(来自其他帖子)因为只有列表是可变的(可以就地改变)你也可以做
[[None]*n for j in range(n)].
然后每一行仍然是唯一的。如果None
对象可以在适当的位置更改,则无效。
答案 1 :(得分:0)
grid = [[None]*n for i in range(n)]