任意嵌套Lis中的del算子

2024-09-28 23:43:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理一个nltk.tree.ParentedTree树,但我认为这个问题比这更普遍。你知道吗

基本上,我有一个任意深度嵌套的列表,我想删除列表的一部分(尽管我不知道该部分嵌套的深度)。我有一个search函数,用于查找列表中某个项的出现,它返回一个n整数元组,其中n是找到的元素的深度。你知道吗

例如,假设我有l = [[['cat', 'dog']], ['fish']],当我调用search(l, 'dog')时,它返回(0, 0, 1)。这告诉我l[0][0][1] == 'dog'。如果我提前知道'dog'发生在(0, 0, 1),我可以通过执行del l[0][0][1]将其从列表中删除。但我不知道提前,所以我需要编程做同样的事情。你知道吗

我可以通过执行以下操作访问列表中的元素'dog'

indices = search(l, 'dog')
for i in indices:
    l = l[i]

所以现在l就是'dog'。但是,我不知道如何从列表中删除它。我不只是想把它设成None。你知道吗


Tags: 函数tree元素列表search编程整数cat
2条回答

尝试:

del reduce(lambda cur, ind: cur[ind], index_list[:-1], l)[index_list[-1]]

这真的是一种更为奇特的方式,完全符合@Martijn Pieters在回答中的建议。你知道吗

您可以循环所有引用(最后一个引用除外),然后使用最后一个引用删除该项:

obj = l
for index in indices[:-1]:
    obj = obj[index]
del obj[indices[-1]]

通过使用除最后一个索引外的所有索引,您解析了对被引用项的父级的引用,因此现在可以使用最后一个索引将其删除。你知道吗

相关问题 更多 >