通过递归在python中通过引用传递列表

时间:2014-04-23 00:36:46

标签: python list pointers recursion reference

我正在使用递归函数调用来遍历树,我想将有价值节点的位置添加到主列表中。我目前的方法是使用全局。如何通过引用传递此列表(或以不使用全局变量的另一种方式解决此问题)

hcList = []

def expand(node):
    global hcList

    if node.hasTreasure():
        hcList.append(node)
    if not node.end():
        expand(node.next())

global hcList
expand(startnode)
hcList.filter()

无论如何不使用毛茸茸的全局做下面的事情?我的实际代码与全局变量相比更加混乱,但概念是相同的。下面的代码不能按我想要的方式工作。即,hcList为空。

def expand(node, hcList):      
    if node.hasTreasure():
        hcList.append(node)
    if not node.end():
        expand(node.next(), hcList)

hcList = []
expand(startnode, hcList)
hcList.filter()

1 个答案:

答案 0 :(得分:1)

对于递归,返回新值

通常更简单
def expand(node, hcList):
    if node.hasTreasure:
         hcList.append(node)
    if node.end():
         return hcList
    return expand(node.next(), hcList)

hcList = expand(startnode, [])
hcList.filter() # not sure why this was in the OP

如果你的列表非常深,你可能在堆栈上有很多,但好的尾递归可以优化它。