This question already has answers here:
List of lists changes reflected across sublists unexpectedly
(13个回答)
2年前关闭。
上面代码的打印结果确实让我感到困惑,为什么数组的第二和第三列变成
哪个输出:
(13个回答)
2年前关闭。
s = [[0]*3]*3
i = 0
while i < 3:
j = 0
while j < 3:
print(s[i][j])
s[i][j] += 1
j += 1
i += 1
上面代码的打印结果确实让我感到困惑,为什么数组的第二和第三列变成
[1,1,1]
和[2,2,2]
而不是[0,0,0]
? 最佳答案
因为当您使用[[0]*3]*3
创建列表列表时,您要创建3次[0,0,0]
列表,所以您会有[[0,0,0],[0,0,0],[0,0,0]]
,但是所有子列表([0,0,0]
)的引用都相同列表,因为您刚刚创建了一个列表并将其乘以3以创建其他列表,所以更改一个列表将更改另一个列表。
为避免这种情况,请使用列表理解功能创建独立的零位列表:
s = [[0]*3 for i in range(3)]
i = 0
while i < 3:
j = 0
while j < 3:
print(s[i][j])
s[i][j] += 1
j += 1
i += 1
print(s) # just to see the final result
哪个输出:
0
0
0
0
0
0
0
0
0
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
关于python - 关于数组嵌套循环的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46131031/
10-15 08:53