【问题标题】:2D Array Unintended Assignment Bug二维数组意外分配错误
【发布时间】:2012-01-30 23:21:11
【问题描述】:

我想创建一个二维数组,如下所示:

grid[y][x] 

所以有 y 行和 x 列。

下面是我这样做的方式,但是当我尝试将数组的 (0,0) 分配为包含值“2”时,代码将每个子数组的第一个值分配给了“2”。

为什么会这样?我应该如何以 Python 方式实例化二维数组?

n = 4 
x=0 
y=0 
grid = [[None]*n]*n 

print grid 

grid[y][x]='Here' 

print grid

【问题讨论】:

标签: python


【解决方案1】:

当您使用* 创建多个引用时,它不会复制数据 所以当你将第一行修改为

[here,none,none,none] 

你实际上改变了所有的行。

解决方案

[[None for i in range(n)] for j in range(n)]

编辑(来自其他帖子)由于只有列表是可变的(可以就地更改),您也可以这样做

[[None]*n for j in range(n)]. 

每一行仍然是唯一的。如果None 对象可以原地更改,这将不起作用。

【讨论】:

    【解决方案2】:
    grid = [[None]*n for i in range(n)]
    

    【讨论】:

      猜你喜欢
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 2014-11-07
      • 2015-11-11
      • 2013-09-04
      • 1970-01-01
      相关资源
      最近更新 更多