python - 在python中递归地从树中删除项目

标签 python recursion tree nltk

seen2 = set()

def eliminate_abs(d): ##remove all entries that connect to the abstraction node, type(d) = list
    def rec(x):
        if x not in seen2:
            seen2.add(x)
            a = x.hypernyms()
            if len(a) != 0:
                kk = a[0]
                if re.search('abstraction',str(kk)):
                    syns.remove(ii)
                else:
                    rec(kk)

    for ii in d: ##type(ii) = <class 'nltk.corpus.reader.wordnet.Synset'>
        rec(ii)

eliminate_abs(syns)

列表“syns”最终将转换为树,但我首先需要删除最终连接到抽象节点的所有项目。我希望这个函数做的是递归地查看“syns”中每个项目的所有上位词,如果找到“abstraction”,则从“syns”中删除原始术语。由于某种原因,这只是删除了其中的一些。

最佳答案

由于您在迭代时使用 syns ,因此您应该迭代 syns 的切片,即制作列表的副本并迭代该副本:

for ii in d[:]:
    rec(ii)

关于python - 在python中递归地从树中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23524811/

相关文章:

c++ - 求和数字递归C++

javascript - 递归函数创建树

haskell - Haskell 中的级别顺序

c - 对二叉树进行排序 - 函数达到 seg。过错

python - 如何向枚举添加方法?

python - 是否可以使用类似缓冲区(基于指针)的字符串比较在 python 3 中进行排序?

python - InvalidArgumentError(回溯见上): indices[1] = 10 is not in [0, 10)

python - EAFP样式的错误消息

if-statement - 列出 Haskell 中的理解和递归 if 语句

rust - 用 Rust 定义一棵树