Python: Funktion, um den Generator zu flatten, der einen anderen Generator enthält

8

Ich würde gerne wissen, wie man Python-Funktion schreiben kann, die Generator flattern kann, die andere Generatoren oder Iteables liefert (die auch andere Generatoren / Iterables ergeben können ... möglicherweise unendlich).

Hier ist ein Beispiel:

gen(gen(1,2,3), gen(4,5,6), [7,8,9], [gen(10,11,12), gen(13,14,15)])

note: gen - bedeutet Generatorobjekt, Inhalt zwischen Klammern nach gen sind Daten, die Generator gen ergeben.

Das erwartete Ergebnis nach "Abflachung": gen(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)

Es ist notwendig, dass die Funktion flatten auch den Generator zurückgibt! (Denn sonst wäre die vorhergehende Verwendung von Generatoren sinnlos).

Nur zu beachten, ich benutze Python 3.

Danke!

    
JoshuaBoshi 16.07.2012, 11:12
quelle

2 Antworten

12

Der einfachste Weg ist eine rekursive Glättung. Angenommen, Sie möchten mit Ausnahme von Strings in alle Iterablen absteigen, können Sie Folgendes tun:

%Vor%

Ab Python 3.3 können Sie auch

schreiben %Vor%     
Sven Marnach 16.07.2012, 11:21
quelle
0

Die nicht-rekursive Methode ist im Wesentlichen ein Abrollen der rekursiven Methode mit einem Stack:

%Vor%     
ecatmur 16.07.2012 12:20
quelle

Tags und Links