2017-07-22 3 views
-3

Ich versuche, eine "einfache" rekursive Funktion zu schreiben, um einen Baum zu durchlaufen, der durch geschachtelte Listen repräsentiert wird. Ich habe die richtige Ausgabe, wenn ich print verwende, aber ich möchte das Ergebnis in einer list zurückgegeben werden.Rekursive Funktion zum Rückgängigmachen einer beliebig verschachtelten Liste

-Code

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) 

Run es

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

Ausgabe über Druck:

4 
5 
2 
3 
1 

Wunsch Ausgabe über Rückgabewert:

[4, 5, 2, 3, 1] 

Antwort

1

Deklarieren Sie einen Akkumulator acc, aggregieren Sie den Rückgabewert des rekursiven Aufrufs in der Schleife.

Am Ende Rückkehr acc + der letzte popped Wert (dies fügt sich gut in den Basisfall).

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 - Genau das, was ich brauchte! Gibt es eine Möglichkeit, dies mit 'yield' zu tun? Ich frage mich nur – Alex

+1

@Alex Ich kann Ihnen keinen konkreten Grund geben (nennen Sie es Programmierer Intuition), aber ich glaube nicht, Ausbeute wäre idiomatisch Sound-Konstrukt für diese Anwendung. –

Verwandte Themen