Python:更改嵌套列表的值

标签 python list replace nested

所以我使用嵌套列表来存储一些数据,但我在更改其中一个子列表的特定值时遇到了问题:

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/

相关文章:

java - List和ArrayList在声明上的区别?

java - 如何编辑文本文档中的特定单词?

将数据帧多列中出现的数字替换为 R 中的另一个值

SQLITE:替换而不使用 auto_increment

python - Pandas:检查 json 对象中是否存在 dataframe 列

python - 与丘比的自相关

javascript - jQuery拆分数组问题

javascript - 如何上传二进制 blob

python - 如何在没有模块的情况下格式化 csv 文件(例如省略第一行和第一列)?

c# - 从 List<T> 到数组 T[] 的转换