Python将变量从列表设置为新值而不指向新位置

时间:2016-06-26 12:56:56

标签: python

简短版:

如果有x = [[True], [False]]n = x[0],是否可以/如何仅使用x[0]n设置为整数?

长版:

我正在尝试编写一个使用大量递归列表的体素类型脚本,我想知道是否有=的替代方法不会覆盖设置为的变量值列表中的项目。

以此为基本示例:

l = [0, [[[2], 0], 0], 0]
path = [1, 0, 0]

cur = l
for i in path
    cur = cur[i]

print cur
#[2]

以下是更新列表可以采取的措施的一些示例:

cur.append(3)
print l
#[None, [[[2, 3], 0], 0], 0]

cur[0] = 3
print l
#[0, [[[3], 0], 0], 0]

但是,我希望能够将[2]值设置为其他值,以便按照上述示例的方式,l变为[0, [[3, 0], 0], 0]。有点像下面的代码,显然不起作用:

cur = 3
print l
#[0, [[[2], 0], 0], 0]

我可以再次按下路径,每次只删除一个级别,但是对于5级递归,这将是120次计算,而不是只有5.我认为可能存在某种类型的函数,如{{1}这是内置但不常用的。抱歉,如果这已经有答案,但我不确定要搜索什么。

1 个答案:

答案 0 :(得分:0)

您可以做的最好的事情是在处理路径时停一个短片,因此您不是找到cur,而是找到prev。然后,您可以使用path的最后一个索引来修改cur中的prev。例如:

l = [0, [[[2], 0], 0], 0]
path = [1, 0, 0]

prev = l
for i in path[:-1]:
    prev = prev[i]

prev[path[-1]] = 3
print l

打印:

[0, [[3, 0], 0], 0]

当然,这仅在path非空时才有效。