gpt4 book ai didi

python - 在 Python 2.7 中,为什么 grid = [ ["A"]*5]*5 不同于 grid = [] grid.append[...]

转载 作者:太空狗 更新时间:2023-10-30 02:33:37 26 4
gpt4 key购买 nike

我正在尝试在 python 2.7 中构建一个 5x5 网格的游戏板,表示为二维列表。我尝试将其写为 board = [["O"]*cols]*rows (cols 和 rows 已声明为 5)但是当我尝试编辑索引处的值时,它会更改整行。例如

cols = 5
rows = 5
board = [["O"]*cols]*rows

这打印:

[['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O']]

现在当我尝试更改索引的值时:

board[1][1] = "X"

它打印:

[['O', 'X', 'O', 'O', 'O'], ['O', 'X', 'O', 'O', 'O'], ['O', 'X', 'O', 'O', 'O'], ['O', 'X', 'O', 'O', 'O'], ['O', 'X', 'O', 'O', 'O']]

我只想更改第 1 行第 1 列的值。

我还尝试了以下操作:

board = []
for i in xrange(5):
board.append(["O"]*cols)

这个就像我想要的那样工作。我想了解的是有什么区别?

最佳答案

如果您计算下面的表达式,您会看到它会为您的第一个示例返回 True,而为另一个示例返回 False。这两个列表实际上都指向内存中的同一个列表。

board[0] 是 board[1]

如果您确实想要一个简短的版本来制作不同的新列表,那么这个版本也可以正常工作。

board = [["O"]*cols for y in range(rows)]

关于python - 在 Python 2.7 中,为什么 grid = [ ["A"]*5]*5 不同于 grid = [] grid.append[...],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12708713/

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