让 a 成为一个二维列表,每个元素都是一个集合。例如设a为(3,3)列表,我初始化如下
a = [set()] * 3
a = [a] * 3
我现在想用另一个集合分配 a[1][1] 。我愿意
a[1][1] = set([1,2,3])
但在这样做时,不仅 a[1][1],而且 a[0][1] 和 a[2][1] 被分配给这个新集合。这对我来说太奇怪了。这是怎么发生的?我应该如何纠正它?
谢谢!!
我将 a 设置为二维列表数组,因为我希望 a 像在 Matlab 中一样像 a = cell(3,3) 一样工作。
你有一个别名问题。list
当您这样做时,您正在共享一个对象
a = [a] * 3
a
then 的每个索引都引用相同的list
. 您有 3 个list
对象,它们都引用了同一个对象。
您可以set
通过执行以下操作看到这与结构无关:
a = [set()] * 3
a = [a] * 3
print(a)
a[1][1] = "Test"
print(a)
输出:
[[set(), set(), set()], [set(), set(), set()], [set(), set(), set()]]
[[set(), 'Test', set()], [set(), 'Test', set()], [set(), 'Test', set()]]
你应该是这样的:
a = [[set() for _ in range(3)] for _ in range(3)]
print(a)
a[1][1] = {1, 2, 3}
print(a)
确保您有不同的list
s,这样您就不会遇到这个问题。
你也可以这样做:
a = [[set()] * 3 for _ in range(3)]
print(a)
a[1][1] = {1, 2, 3}
print(a)
两者都产生相同的输出:
[[set(), set(), set()], [set(), set(), set()], [set(), set(), set()]]
[[set(), set(), set()], [set(), {1, 2, 3}, set()], [set(), set(), set()]]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句