这可能是一个重复的问题,但不同之处在于当我使用for循环时发生错误。要解释一下,如果我有清单:
x = [[1,2,3],[1,2,3],[1,2,3]]
我做了
x[0][0] = 5
列表将更改为
[[5,2,3],[5,2,3],[5,2,3]]
评论指出上述内容可能不正确,下面直接从控制台输出:
>>> x = Board()
>>> x.create(6,6)
[['', '', '', '', '', ''], ['', '', '', '', '', ''], ['', '', '', '', '', ''], ['', '', '', '', '', ''], ['', '', '', '', '', ''], ['', '', '', '', '', '']]
>>> x.board
[['', '', '', '', '', ''], ['', '', '', '', '', ''], ['', '', '', '', '', ''], ['', '', '', '', '', ''], ['', '', '', '', '', ''], ['', '', '', '', '', '']]
>>> x.board[0][1]
''
>>> x.board[0][1] = 1
>>> x.board
[['', 1, '', '', '', ''], ['', 1, '', '', '', ''], ['', 1, '', '', '', ''], ['', 1, '', '', '', ''], ['', 1, '', '', '', ''], ['', 1, '', '', '', '']]
>>>
其他答案中描述的解决方案涉及创建一个for循环来创建一个新的列表元素,但是我不知道如何在我的代码中实现它,如下所示 -
class Board():
def create(self, rows, cols):
self.board = []
col_template = []
for col in range(cols):
col_template.append("")
for row in range(rows):
self.board.append(col_template)
return self.board
rows, cols
有些甚至是整数
答案 0 :(得分:4)
我认为你需要这样做:
self.board.append(col_template[:])
否则,您的电路板将引用相同的阵列。
你的正确例子应该是:
a=[1,2,3]
x = [a,a,a]
x[0][0] = 5
print(x) # [[5, 2, 3], [5, 2, 3], [5, 2, 3]]
解决上述问题:
a=[1,2,3]
x = [a[:],a[:],a[:]]
x[0][0] = 5
print(x) # [[5, 2, 3], [1, 2, 3], [1, 2, 3]]
这是因为x只存储对同一列表的引用a。您需要明确创建a[:]
的副本(由a
完成)以在x中创建不同的子列表。