用于反转任意嵌套列表的递归函数

时间:2017-07-22 17:44:32

标签: python python-3.x recursion

我试图写一个简单的"用于遍历由嵌套列表表示的树的递归函数。我使用print时输出正确,但我想在list中返回结果。

代码

def trav(t):
    while len(t) > 1:
        for counter, i in enumerate(t):
            if isinstance(i, list):
                t2 = t.pop(counter)
                trav(t2)
    n=t.pop()
    print(n)

运行它

tree1 = [1, [2, [4], [5]], [3]]
trav(tree1)

通过打印输出:

4
5
2
3
1

通过返回值获得所需的输出:

[4, 5, 2, 3, 1] 

1 个答案:

答案 0 :(得分:1)

声明累加器acc,聚合循环中递归调用的返回值。

最后返回acc +最后一个弹出的值(这很好地合并到基本情况中)。

def trav(t):
    acc = []
    while len(t) > 1:
        for counter, i in enumerate(t):         
            if isinstance(i, list):
                t2 = t.pop(counter)
                acc += trav(t2)

    n = t.pop()
    return acc + [n]



tree1 = [1, [2, [4], [5]], [3]]
print(trav(tree1))
# [4, 5, 2, 3, 1]