Ist es möglich, eine Liste in ein verschachteltes Diktat der Schlüssel * ohne * Rekursion umzuwandeln?

7

Angenommen, ich hätte eine Liste wie folgt:

%Vor%

Ist es möglich, aus dieser Liste das folgende dict ohne mit Rekursion / einer rekursiven Funktion zu erstellen?

%Vor%     
Phillip B Oldham 05.11.2012, 18:39
quelle

5 Antworten

11

Für den einfachen Fall, einfach iterieren und bauen, entweder vom Ende oder vom Anfang:

%Vor%

oder

%Vor%

Die erste Lösung kann auch mit reduce() als Einzeiler ausgedrückt werden:

%Vor%     
Martijn Pieters 05.11.2012 18:44
quelle
3

Für diesen einfachen Fall zumindest, ja:

%Vor%     
Silas Ray 05.11.2012 18:42
quelle
3

Oder für Phantasie und eingeschränkte Lesbarkeit:

%Vor%     
Jesse the Game 05.11.2012 18:46
quelle
1

Es ist erwähnenswert, dass jede Rekursion in Iteration konvertiert werden kann , obwohl das manchmal nicht so einfach ist. Für das spezielle Beispiel in der Frage ist einfach , es ist nur eine Frage des Ansammelns des erwarteten Ergebnisses in einer Variablen und des Durchlaufen der Eingabeliste in der richtigen Reihenfolge. Das meine ich:

%Vor%

Oder noch kürzer, der obige Algorithmus kann als ein Einzeiler ausgedrückt werden (angenommen Python 2.x, in Python 3.x reduce wurde in das functools -Modul verschoben. . Beachten Sie, wie die Variablennamen in der vorherigen Lösung den Lambda-Parametern entsprechen und wie in beiden Fällen der Anfangswert des Akkumulators {} :

ist %Vor%

Wie auch immer funktioniert die Funktion convert wie erwartet:

%Vor%     
Óscar López 05.11.2012 18:46
quelle
0
%Vor%     
user711413 05.11.2012 18:43
quelle