我正在尝试更新任意嵌入列表中的元素。
例如,一个潜在的嵌入列表看起来像:
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
变量来更新值,这是我能想到的唯一方法。
1条答案
按热度按时间3j86kqsm1#
首先,你
deepcopy
原始列表。这意味着对inner
所做的任何更改都不会显示在原始列表中。不要这样做。其次,
inner = "NEWVALUE"
不会更新原始列表,因为此时inner
是一个字符串,您只需将名称重新分配给不同的值。相反,您希望深入到embedded_index
的 * last-but-one* 元素(这使得inner
成为一个列表),然后使用最后一个元素索引到该列表并设置值:字符串
在这段代码的结尾,
lst
变成:型
您可能会发现阅读Python Names and Values by Ned Batchelder很有帮助