python - 从递归函数返回平面对象列表

时间:2015-12-02 14:24:25

标签: python

我有一个递归函数,循环遍历任意数量的对象,他们的孩子收集年龄符合过滤年龄的孩子。

在这种情况下,我希望循环每个人和他们的孩子收集任何年龄为2或4的人。但是我不完全确定如何连续构建单个列表然后返回它。现在它只返回最后找到的人。

已更新 我对递归函数做了一些更改,以便始终附加到传递的变量。这是一个合适的解决方案吗?

from random import randint

NODES = []

class Person():
    def __init__(self, name="", age=0, children=None):
        self.name = name
        self.age = (randint(0,4))
        self.children = children if children is not None else []

for x in xrange(5):
    new = Person()
    NODES.append( new )
    for c in xrange(5):
        new.children.append( Person() )


def get_nodes(items=[], ages=[], results=[]):
    print "Searching..."
    # pseudo code
    for item in items:
        if item.age in ages:
            print "\t","valid age"
            results.append(item)

        results + get_nodes(items=item.children, ages=ages, results=results)

    return results


AGED_NODES = get_nodes( items=NODES, ages=[2, 4], results=[])
print len(AGED_NODES)
print AGED_NODES

1 个答案:

答案 0 :(得分:3)

对我来说,像get_nodes这样的递归函数应该只返回自己的结果 - 调用者可以添加自己的结果,而调用者的调用者也这样做,这似乎更合乎逻辑。所以不,我不会通过'结果'进入get_nodes。

另请注意您的行:

results + get_nodes(items=item.children, ages=ages, results=results)

什么也没做。

所以我的代码版本如下:

def get_nodes(items=[], ages=[]):
    myresults = []
    print "Searching..."
    # pseudo code
    for item in items:
        if item.age in ages:
            print "\t","valid age"
            myresults.append(item)

        myresults.extend( get_nodes(items=item.children, ages=ages) )

    return myresults