2017-07-22 63 views
-3

我正在嘗試編寫一個「簡單」遞歸函數來遍歷由嵌套列表表示的樹。當我使用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 
通過return value

所需的輸出:

[4, 5, 2, 3, 1] 

回答

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] 
+0

@coldspeed - 正是我需要的!有沒有一種方法可以用'yield'來做到這一點?只是想知道 – Alex

+1

@Alex我不能給你一個具體的理由(稱之爲程序員的直覺),但我不認爲這個應用程序的收益是慣用的。 –