如何在树中列出满足某些谓词的值?

时间:2016-03-10 18:33:04

标签: python list python-3.x tree

树是非二元的,因为它可以有两个以上的孩子。每个节点都有一个子列表。在这里,我正在编写list_if,它返回树中满足谓词p的值列表。当我测试我的代码时,它会显示'int' object is not iterable。有人知道我怎么写代码吗?

def list_if(t, p):
    """
    Return a list of values in Tree t that satisfy predicate p(value).

    Assume p is defined on all of t's values.

    @param Tree t: tree to list values that satisfy predicate p
    @param (object)->bool p: predicate to check values with
    @rtype: list[object]

    >>> def p(v): return v > 4
    >>> t = descendants_from_list(Tree(0), [1, 2, 3, 4, 5, 6, 7, 8], 3)
    >>> list_ = list_if(t, p)
    >>> list_.sort()
    >>> list_
    [5, 6, 7, 8]
    >>> def p(v): return v % 2 == 0
    >>> list_ = list_if(t, p)
    >>> list_.sort()
    >>> list_
    [0, 2, 4, 6, 8]
    """  ###gather_lists() eliminates lists in list
    return gather_lists([t.value if p(t.value) else []] +[list_if(x, p) for x in t.children]) 

1 个答案:

答案 0 :(得分:0)

查看回溯(长错误消息)。就在上面写着:

之类的行
TypeError: 'int' object is not iterable

应显示错误发生的程序行。 (这就是为什么它有助于在您的问题中发布追溯。)

在这种情况下,程序试图迭代int。而口译员告诉你,这是无法做到的。

我怀疑带有错误的行有for x in y:,而y是int而不是列表(如果错误在list_if函数中,请查看t。孩子。建造树时可能没有正确设置)