Python 为什么可以';我不能正确地分配给3d列表吗?
假设我制作了一个3D列表Python 为什么可以';我不能正确地分配给3d列表吗?,python,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]]
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列表中的一个元素分配变量,而不是给每个第一个元素分配变量吗?谢谢
如果有必要的话,我使用的是Python 3.7 32位。我通过假设您实际如何定义列表来复制您的结果。我假设您在下面定义了一些变量,例如
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]]]
或
我得到了你想要的,而不是你得到的。这就是你的代码吗?你是如何建立你的
列表的?你真的是这样宣布的吗?或者你在做类似于list=[[a,a],[a,a]]
的事情?在这种情况下,您将相同的列表a
分配给每个元素,因此当您更改它时,您会看到a
被引用的所有地方都发生了更改。如果您使用某种复制器构建了列表,那么您就陷入了一个记录良好的问题。原来火箭危险品和胡安帕·阿里维拉加是对的!我使用了一段不同的代码来创建这个列表,它是([([[0,0,0]])*size\ux]*size\uy)。Hoog的代码修复了它。以后,请在发布之前测试您发布的代码。谢谢!这对我有用。事实证明,正如火箭危险品所指出的,我不知何故在同一份清单中多次申报了同一份清单。。。听起来像是虫洞式的数学。使用您最后给出的方法声明它是有效的。
mylist = [[[0 for _ in range(2)] for _ in range(2)] for _ in range(2)]