我有一个递归函数,循环遍历任意数量的对象,他们的孩子收集年龄符合过滤年龄的孩子。
在这种情况下,我希望循环每个人和他们的孩子收集任何年龄为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
答案 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