Es ist erwähnenswert, dass every recursion can be converted into iteration, wenn auch manchmal, dass nicht so einfach sein könnte. Für das spezielle Beispiel in der Frage ist es ist einfach genug, es ist nur eine Frage der Anhäufung des erwarteten Ergebnisses in einer Variablen und durchläuft die Eingabeliste in der richtigen Reihenfolge. Das ist, was ich meine:
def convert(lst):
acc = {}
for e in reversed(lst):
acc = {e: acc}
return acc
Oder noch kürzer, kann der obige Algorithmus als Einzeiler ausgedrückt werden (vorausgesetzt, Python 2.x, in Python 3.x reduce
zum functools
Modul bewegt wurde). Beachten Sie, wie die Variablennamen in der vorherigen Lösung der Lambda-Parameter entsprechen, und wie in den beiden Fällen ist der Anfangswert des Akkumulators {}
:
def convert(lst):
return reduce(lambda acc, e: {e: acc}, reversed(lst), {})
So oder so, die Funktion convert
Arbeiten wie erwartet:
mylist = ['a','b','c','d']
convert(mylist)
=> {'a': {'b': {'c': {'d': {}}}}}
Nun, Rekursion === Iteration, also ja. Hast du einen Code, um zu zeigen, was du probiert hast? Vielleicht kann eine Antwort darauf aufbauen. – Makoto
können Sie einfach 'map' verwenden,' reduce' –
@Makoto gibt es keinen bestimmten Anwendungsfall, den ich mir vorstelle. Ich habe einfach eine Reihe von FOSS-Projekten überprüft und festgestellt, dass die meisten, wenn nicht alle, Rekursionen verwendeten (nicht falsch). Es hat mich nur darüber nachdenken lassen, ob es eine Alternative zur Rekursion gibt. Die Antwort von Óscar López ist eher aufschlussreich (speziell der Link). –