Ich möchte 2 Generatoren (möglicherweise) unterschiedlicher Länge analysieren mit zip
:
for el1, el2 in zip(gen1, gen2):
print(el1, el2)
Wenn gen2
jedoch weniger Elemente vorhanden sind, wird ein zusätzliches Element von gen1
"verbraucht".
Zum Beispiel,
def my_gen(n:int):
for i in range(n):
yield i
gen1 = my_gen(10)
gen2 = my_gen(8)
list(zip(gen1, gen2)) # Last tuple is (7, 7)
print(next(gen1)) # printed value is "9" => 8 is missing
gen1 = my_gen(8)
gen2 = my_gen(10)
list(zip(gen1, gen2)) # Last tuple is (7, 7)
print(next(gen2)) # printed value is "8" => OK
Anscheinend fehlt ein Wert ( 8
in meinem vorherigen Beispiel), weil er gen1
gelesen wird (wodurch der Wert generiert wird 8
), bevor er erkennt, dass er gen2
keine weiteren Elemente enthält. Aber dieser Wert verschwindet im Universum. Wenn gen2
"länger" ist, gibt es kein solches "Problem".
FRAGE : Gibt es eine Möglichkeit, diesen fehlenden Wert abzurufen (dh 8
in meinem vorherigen Beispiel)? ... idealerweise mit einer variablen Anzahl von Argumenten (wie es der zip
Fall ist).
HINWEIS : Ich habe derzeit eine andere Implementierung mithilfe von verwendet, itertools.zip_longest
aber ich frage mich wirklich, wie ich diesen fehlenden Wert mithilfe von zip
oder einem gleichwertigen Wert erhalten kann .
HINWEIS 2 : Ich habe einige Tests der verschiedenen Implementierungen in dieser REPL erstellt, falls Sie eine neue Implementierung einreichen und ausprobieren möchten :) https://repl.it/@jfthuong/MadPhysicistChester
zip()
gelesen hat , 8
aus gen1
, es ist weg.