所以我使用嵌套列表来存储一些数据,但我在更改其中一个子列表的特定值时遇到了问题:
if attributes[3] == 'W':
self.board[3][3] = 'W'
(数字是我用来测试的占位符)
board 是一个按如下方式创建的类变量(我正在尝试创建一个由用户指定的网格,他们输入的列和行大小构成了属性的前两部分)
self.board = []
rows = []
self.score = [0, 0]
for x in range(attributes[0]):
rows.append('')
for y in range(attributes[1]):
self.board.append(rows)
但是,每当我尝试更改子列表的值时,它都会更改同一索引的所有子列表的值:
[['', '', '', 'W', '', '', '', ''], ['', '', '', 'W', '', '', '', ''], ['', '', '', 'W', '', '', '', ''], ['', '', '', 'W', '', '', '', ''], ['', '', '', 'W', '', '', '', ''], ['', '', '', 'W', '', '', '', ''], ['', '', '', 'W', '', '', '', ''], ['', '', '', 'W', '', '', '', '']]
我不知道哪里出了问题。有人有什么想法吗?
最佳答案
通过 self.board.append(rows)
,您将在循环中附加相同的列表。您需要附加行列表的副本:self.board.append(rows[:])
所以修改后的代码将是:
self.board = []
rows = []
self.score = [0, 0]
for x in range(attributes[0]):
rows.append('')
for y in range(attributes[1]):
self.board.append(rows[:])
关于Python:更改嵌套列表的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28825423/