Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:更改嵌套列表的值_Python_List_Replace_Nested - Fatal编程技术网

Python:更改嵌套列表的值

Python:更改嵌套列表的值,python,list,replace,nested,Python,List,Replace,Nested,因此,我使用嵌套列表存储一些数据,但在更改其中一个子列表的特定值时遇到问题: if attributes[3] == 'W': self.board[3][3] = 'W' (数字是我用来测试的占位符) board是一个类变量,创建如下(我正试图创建一个由用户指定的网格,其列和行大小的输入构成属性的前两部分) 但是,每当我尝试更改子列表的值时,它都会更改同一索引的所有子列表的值: [['', '', '', 'W', '', '', '', ''], ['', '', '', 'W',

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

if attributes[3] == 'W':
    self.board[3][3] = 'W'
(数字是我用来测试的占位符)

board是一个类变量,创建如下(我正试图创建一个由用户指定的网格,其列和行大小的输入构成属性的前两部分)

但是,每当我尝试更改子列表的值时,它都会更改同一索引的所有子列表的值:

[['', '', '', 'W', '', '', '', ''], ['', '', '', 'W', '', '', '', ''], ['', '', '', 'W', '', '', '', ''], ['', '', '', 'W', '', '', '', ''], ['', '', '', 'W', '', '', '', ''], ['', '', '', 'W', '', '', '', ''], ['', '', '', 'W', '', '', '', ''], ['', '', '', 'W', '', '', '', '']]

我不知道怎么了。有人有什么想法吗?

我认为可以通过这个非常简单的例子来说明原因:

a = [1,2,3]

b = [a,a,a] # <- this is what you are actually doing

print(list(map(id,b)))
#[140475353832712, 140475353832712, 140475353832712]
请注意,每个子列表的id不同。现在b2包含对不同子列表的引用

总之,您应该具备以下条件:

for y in range(attributes[1]):
    self.board.append(rows[:])
通过
self.board.append(行)
在循环中追加相同的列表。您需要附加行列表的副本:
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[:])
for y in range(attributes[1]):
    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[:])