1

我有一个关于列表的问题。我有一个名为size,的长度为 1 的列表size=[4]

我有一块板子,其中一些单元格具有size其他值中的一个值。我会解释:

  • 板是 17x17
  • board[x][y] = ("name_of_something", size)

我想更新size为,可以说,[3]并且我希望每个具有size值的单元格也将从更新("name_of_something", [4])("name_of_something", [3])

但我想做到这一点,而不是到处跑!我怎样才能做到这一点?

这是一张图片: http ://up400.siz.co.il/up2/utg4yidtnmz1.jpg

4

2 回答 2

2

回应您的图片:

>>> size = [4]
>>> a = ('nadav', 3, size)
>>> size = [3]
>>> a
('nadav', 3, [4])

您正在做的是将新列表分配给sizewhilea仍将指向旧列表。您必须改为修改现有列表:

>>> size = [4]
>>> a = ('nadav', 3, size)
>>> size[:] = [3]
>>> a
('nadav', 3, [3])
于 2013-11-08T15:25:25.447 回答
0

创建板时,只需确保所有单元格都引用同一个列表。

例如看这个:

size=[3]
n_rows=3
n_cols=3
board=[
  [('cell %d,%d'%(row,col),size) for col in range(n_cols)] 
  for row in range(n_rows)
]
print('Before:')
for row in board:
  print('  '+str(row))
size[0] = 4
print('After:')
for row in board:
  print('  '+str(row))

结果:

前:
  [('cell 0,0', [3]), ('cell 0,1', [3]), ('cell 0,2', [3])]
  [('cell 1,0', [3]), ('cell 1,1', [3]), ('cell 1,2', [3])]
  [('cell 2,0', [3]), ('cell 2,1', [3]), ('cell 2,2', [3])]
后:
  [('cell 0,0', [4]), ('cell 0,1', [4]), ('cell 0,2', [4])]
  [('cell 1,0', [4]), ('cell 1,1', [4]), ('cell 1,2', [4])]
  [('cell 2,0', [4]), ('cell 2,1', [4]), ('cell 2,2', [4])]
于 2013-11-08T14:38:49.217 回答