Python:将值分配给具有设置元素的二维列表数组

Stupid_Guy

让 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

athen 的每个索引都引用相同的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)

确保您有不同的lists,这样您就不会遇到这个问题。

你也可以这样做:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C#将一维数组分配给具有偏移值的二维数组

将二维数组值分配给变量

将列表中的每个值分配给二维数组

将值分配给二维python数组中的单个单元格

快速将值分配给二维数组

如何将匹配表达式的值分配给 Scala 中的二维数组元素?

我在 RUBY 中的二维数组有问题,它没有将值分配给它

如何在Java中随机将显式值分配给二维数组

如何将记录集值分配给二维数组

无法将值分配给二维布尔数组

如何在Python中将数组(二维列表)分配给字典?

如何从excel文件中读取包含符号的值(例如:[1,2,3]作为列表或一维/二维数组)并分配给python中的变量?

如何将一维数组分配给二维数组?

尝试将字符分配给二维字符数组时,表示数组值的整数在 for 循环内增加

通过引用将较小的二维数组分配给较大的二维数组

PHP POST数据分配给二维数组

在类方法中分配给二维数组

如何将多维数组分配给二维数组?

如何将excel文件数据的元素分配给Python中的二维矩阵?

NumPy:排序3D数组,但将第二维分配给first

如何使用 CudaMallocHost 将固定内存分配给二维数组?

程序在for循环的中间以状态-1073741510终止,将输入分配给二维数组

如何将二维变量分配给数组

如何将二维数组变量分配给 Swift 中的大浮点矩阵?

在二维列表中检测矩形(具有相同元素值的子数组)

将值分配给动态多维数组的第一维和第二维时,VBA下标超出范围

C:将二维数组分配给另一个数组

将双精度分配给双精度二维数组 C 编程时出现接收错误

将值分配给R中数组的特定维