gpt4 book ai didi

python - 这两个二维数组有什么区别?

转载 作者:行者123 更新时间:2023-11-28 20:53:13 28 4
gpt4 key购买 nike

我正在编写一个需要二维数组的程序,遇到了一个奇怪的问题。

起初,我写道:

board = [[]]*11

在一个数组中创建十一个数组。

然后我希望每个数组中有 11 个空格,所以我写道:

for i in range(11):
board[i].append(' ')

我想用星号填充第三个数组,从索引 4 到 7,所以我写道:

for i in range(4, 7):
board[2][i] = '*'

但出乎意料的是,不仅第三个数组受到代码的影响,“board”中的所有数组都被更改了。

当然,我写道:

board2 = []
for i in range(11):
board2.append([])

创建我的数组,然后写:

for i in range(11):
for i in range(11):
board2[i].append(' ')

用包含 11 个空格的 11 个数组创建我的数组。

在我这样创建我的数组之后,我能够运行代码来添加星星,正如预期的那样,只影响了一个数组而不是所有数组。

谁能解释一下这两个看似相似的数组之间有什么区别?

最佳答案

列表 [[]] * 11 包含 11 个对相同列表的引用。

您的第二个示例创建了 11 个不同列表。

board = [[]]*11
# ^^ this is called just once

board2 = []
for i in range(11):
board2.append([])
# ^^ this is called 11 times, creating 11 different lists

编写第二个示例的另一种方法是使用列表理解:

[[] for i in range(11)]

关于python - 这两个二维数组有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5397519/

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