提问人:miaoweminent 提问时间:7/26/2023 最后编辑:phomiaoweminent 更新时间:7/26/2023 访问量:23
如何更新(任意)嵌入式列表的元素?
How to update an element of an (arbitrarily) embedded list?
问:
我正在尝试更新任意嵌入的列表列表中的元素。
例如,潜在的嵌入式列表如下所示:
lst = ['a', ['b', ['c', 'd']]]
我想将“b”更新为字符串“NEWVALUE”。我们可以假设每个元素都是唯一的,如果有帮助,每个列表的长度为 2。
我试图通过获取此元素的索引作为整数列表来更改“b”的值,使用以下解决方案: 嵌套列表中元素的索引
因此,我有一个变量,其中包含要更改的值的索引,作为整数列表。
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
答:
0赞
pho
7/26/2023
#1
首先,你原来的清单。这意味着所做的任何更改都不会显示在原始列表中。别这样。deepcopy
inner
其次,不更新原始列表,因为此时是一个字符串,您只是将名称重新分配给其他值。相反,您希望向下钻取到的最后一个元素(生成一个列表),然后使用最后一个元素索引到该列表中并设置值:inner = "NEWVALUE"
inner
embedded_index
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']]]
阅读 Ned Batchelder 的 Python 名称和值可能会很有帮助
评论