python-3.x 如何更新(任意)嵌入列表的元素?

5jdjgkvh  于 2023-08-08  发布在  Python
关注(0)|答案(1)|浏览(77)

我正在尝试更新任意嵌入列表中的元素。
例如,一个潜在的嵌入列表看起来像:

lst = ['a', ['b', ['c', 'd']]]

字符串
我想将'B'更新为字符串“NEWVALUE”。我们可以假设每个元素都是唯一的,如果有帮助的话,每个列表的长度都是2。
我尝试通过将该元素的索引作为整数列表来改变'B'的值,使用中提供的解决方案:Index of an element in a nested list
所以,我有一个变量,它包含要更改的值的索引,作为一个整数列表。

embedded_index = [1,0]


理想情况下,我希望更新元素,执行如下操作:

lst[embedded_index] = "NEWVALUE"


因此更新后的lst['a', ['NEWVALUE', ['c', 'd']]]
但这显然行不通,Python不使用列表访问嵌入式索引。
我尝试使用以下代码更新该值:

import copy
inner = copy.deepcopy(lst)
for i in embedded_index:
    inner = inner[i]

inner = "NEWVALUE"


但这并没有更新原来的lst
我不一定需要使用embedded_index变量来更新值,这是我能想到的唯一方法。

3j86kqsm

3j86kqsm1#

首先,你deepcopy原始列表。这意味着对inner所做的任何更改都不会显示在原始列表中。不要这样做。
其次,inner = "NEWVALUE"不会更新原始列表,因为此时inner是一个字符串,您只需将名称重新分配给不同的值。相反,您希望深入到embedded_index的 * last-but-one* 元素(这使得inner成为一个列表),然后使用最后一个元素索引到该列表并设置值:

inner = lst # Do not deepcopy
for i in embedded_index[:-1]: # iterate up to second-last embedded_index
    inner = inner[i]

inner[embedded_index[-1]] = "NEWVALUE"

字符串
在这段代码的结尾,lst变成:

['a', ['NEWVALUE', ['c', 'd']]]


您可能会发现阅读Python Names and Values by Ned Batchelder很有帮助

相关问题