在嵌套Python列表中设置值自动迭代[重复]

问题描述 投票:0回答:1

我有一个由

model = [[[[0,0,0,0]]*4]*15]*5
创建的 python 列表,该列表看起来像这样(没有简洁点):
model = [[[[0,0,0,0],...[0,0,0,0]]...[[0,0,0,0],...[0,0,0,0]]]...[[[0,0,0,0],...[0,0,0,0]]...[[0,0,0,0],...[0,0,0,0]]]]
。问题是,当我尝试使用

将其中一个零设置为其他值时


def setLED(model,boardid,chipid,tankid,ledid,value):
     model[boardid][chipid][tankid][ledid]=value

每个 4 个零的列表都设置相同。即,如果我尝试使用 setLED(model,0,0,0,0,255),则每个 4 个零列表中的第一个值将为 255。预期结果是只有第一个 4 个零列表(即 model[0 ][0][0][0]),将被更改。我认为没有办法附加文件,但如果有人需要它,我可以发布列表的完整内容。

提前感谢任何能够弄清楚为什么会发生这种情况的人。

编辑:这是嵌套列表索引

的副本
python iteration nested-lists
1个回答
3
投票

当您创建这样的数组数组时:

[[0]]*n

您正在创建一个数组,其中包含对同一数组的 n 个引用。您需要以另一种方式添加新数组。做到这一点的一种方法是使用列表理解,即

[[[ [0,0,0,0] for _ in range(4)] for _ in range(15)] for _ in range(5)]

它确实创建新数组而不是重用引用。

© www.soinside.com 2019 - 2024. All rights reserved.