gpt4 book ai didi

python - 更改列表的 boolean 列表的某个索引也会更改其他列表

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:07 26 4
gpt4 key购买 nike

所以我有一个 boolean 列表列表,我将某个索引从 True 更改为 False,它也会影响列表列表中的其他一些元素。为什么会发生这种情况?还有其他选择吗?

test = [[True]*9]*9
test[0][1] = False
print(test)

输出:

[[True, False, True, True, True, True, True, True, True], 
[True, False, True, True, True, True, True, True, True],
[True, False, True, True, True, True, True, True, True],
[True, False, True, True, True, True, True, True, True],
[True, False, True, True, True, True, True, True, True],
[True, False, True, True, True, True, True, True, True],
[True, False, True, True, True, True, True, True, True],
[True, False, True, True, True, True, True, True, True],
[True, False, True, True, True, True, True, True, True]]

最佳答案

你想做的是:

test = [[True for i in range(cols)] for j in range(rows)]
#OR
test = [[True]*cols for j in range(rows)]

做的问题

test = [[True]*9]*9

您正在创建一个多维列表,该列表引用保存True值的相同内存地址

这就像拥有:

test = [ [True, True, True, True, True, True, True, True, True] repeated 9 times ]

其中所有行都指向各自列的相同内存位置。因此,当您更改一列中的值时,整组列值都会发生更改。

因此,按照所需的方式,

test = [[True for i in range(9)] for j in range(9)]
test[0][1] = False
print(test)

将打印:

[[True, False, True, True, True, True, True, True, True], 
[True, True, True, True, True, True, True, True, True],
[True, True, True, True, True, True, True, True, True],
[True, True, True, True, True, True, True, True, True],
[True, True, True, True, True, True, True, True, True],
[True, True, True, True, True, True, True, True, True],
[True, True, True, True, True, True, True, True, True],
[True, True, True, True, True, True, True, True, True],
[True, True, True, True, True, True, True, True, True]]

关于python - 更改列表的 boolean 列表的某个索引也会更改其他列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46848035/

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