Verfahrgeschwindigkeit habe ich eine Reihe von Generatoren: (gen_0, gen_1, ... gen_n)eine Folge von Generatoren
Diese Generatoren ihre Werte träge schaffen, aber endlich sind und möglicherweise unterschiedliche Längen haben.
Ich muss in der Lage sein, einen anderen Generator zu konstruieren, der das erste Element jedes Generators der Reihe nach liefert, gefolgt von der zweiten usw., wobei die Werte von Generatoren, die erschöpft sind, übersprungen werden.
glaube ich dieses Problem zu nehmen das Tupel analog
((1, 4, 7, 10, 13, 16), (2, 5, 8, 11, 14), (3, 6, 9, 12, 15, 17, 18))
und durchquert, so dass es die Zahlen von 1 bis 18 um ergeben würde.
Ich arbeite an der Lösung dieses einfachen Beispiels mit (genA, genB, genC) mit genA liefert Werte von (1, 4, 7, 10, 13, 16), genB ergibt (2, 5, 8, 11 , 14) und genC ergibt (3, 6, 9, 12, 15, 17, 18).
Um das einfachere Problem mit dem Tupel von Tupeln zu lösen, ist die Antwort ziemlich einfach, wenn die Elemente des Tupels die gleiche Länge haben. Wenn die Variable ‚a‘ auf das Tupel bezeichnet, könnte man
[i for t in zip(*a) for i in t]
verwenden Leider sind die Elemente sind nicht notwendigerweise die gleiche Länge und die Zip-Trick scheint nicht ohnehin für Generatoren zu arbeiten.
Bis jetzt ist mein Code schrecklich hässlich und ich finde nichts, das einer sauberen Lösung nähert. Hilfe?
'itertools.izip_longest'; Sie können einen Sentinel übergeben, um die auslaufenden Generatoren zu puffern. Wenn Sie möchten, können Sie diesen Sentinel dann aus den Ergebnissen filtern. – katrielalex