Ich möchte 2 Generatoren (möglicherweise) unterschiedlicher Länge analysieren mit zip:
for el1, el2 in zip(gen1, gen2):
print(el1, el2)
Wenn gen2jedoch 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 ( 8in meinem vorherigen Beispiel), weil er gen1gelesen wird (wodurch der Wert generiert wird 8), bevor er erkennt, dass er gen2keine 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 8in meinem vorherigen Beispiel)? ... idealerweise mit einer variablen Anzahl von Argumenten (wie es der zipFall ist).
HINWEIS : Ich habe derzeit eine andere Implementierung mithilfe von verwendet, itertools.zip_longestaber ich frage mich wirklich, wie ich diesen fehlenden Wert mithilfe von zipoder 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 , 8aus gen1, es ist weg.