为什么我不能正确分配3d列表?

时间:2019-05-14 17:51:15

标签: python

假设我列出了3D列表

list = [[[0, 0], [0, 0]], [[0, 0], [0, 0]]]

我跑

list[0][0][0] = 1 #set the first element of the first list of the first list to 1

print(list)

我希望得到

[[[1, 0], [0, 0]], [[0, 0], [0, 0]]]

但是我得到了

[[[1, 0], [1, 0]], [[1, 0], [1, 0]]]

有人能弄清楚如何使它为3D列表的仅一个元素而不是每个第一个元素分配变量吗?谢谢!

如果有关系,我正在使用32位Python 3.7。

1 个答案:

答案 0 :(得分:0)

我通过假设您实际定义列表的方式来复制您的结果。我假设您在下面定义了一些变量,例如ab,并用它来创建列表。但是,新列表仍然是对您的ab变量的一堆引用,因此更改一个实际上会更改ab,这会影响您的整个列表。

ab = [0,0]

mylist = [[ab,ab],[ab,ab]]
mylist[0][0][0] = 1

print(mylist,"    ",ab)

输出

[[[1, 0], [1, 0]], [[1, 0], [1, 0]]]      [1, 0]

要解决此问题,请使用0而不是某些变量来简单地初始化列表:

mylist = [[[0,0],[0,0]],[[0,0],[0,0]]]

mylist = [[[0 for _ in range(2)] for _ in range(2)] for _ in range(2)]