gpt4 book ai didi

行为异常的 Python 列表列表

转载 作者:太空宇宙 更新时间:2023-11-04 10:26:54 26 4
gpt4 key购买 nike

这可能是一个重复的问题,但不同之处在于我在使用 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是一些偶数

最佳答案

我认为你需要这样做:

  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 中具有不同的子列表。

关于行为异常的 Python 列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28867195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com