我有一个项目列表,它们可能会也可能不会被任意嵌套。我想替换列表中的一个元素。无论哪种方式(嵌套与否),我都将元素的索引位置存储在另一个列表中。
这是一个嵌套列表示例,我想用其他内容替换 'xyz'
,比如 123
。我将 'xyz'
的位置存储在 loc
中:
find='xyz'
replace=123
nested=[['abc',1],['xyz',2]]
print(loc) # [1,0]
如何使用 loc
将 'xyz'
替换为 123
?
这是一个未嵌套的示例,我想在其中进行相同的替换:
unnested=['abc','xyz']
print(loc) # [1]
如果 loc
只有一个元素,那么你可以简单地做:
*nest,element=loc
if not nest:
unnested[element]=replace
else: pass # need help with this part
是否有足够灵活的方法来处理这两种情况?
最佳答案
这与其他答案相同,只是以功能方式走路径:
reduce(getitem, loc[:-1], nested)[loc[-1]] = replace
在 Python 3 中你需要导入 reduce
来自 functools
。和 getitem
来自 operator
模块。如果您只有列表,则可以改用 list.__getitem__
。
说明:reduce
以nested
开始,并用getitem(thecurrentvalue, i)
替换每个值i
在 loc[:-1]
中。例如,如果 loc
是 [2, 4, 1, 3]
那么你会得到 getitem(getitem(getitem(nested, 2), 4), 1 )
。这与 nested[2][4][1]
相同。
关于python - 在 Python 中查找并替换(可能)嵌套列表中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40245389/