Je veux analyser 2 générateurs de longueur (potentiellement) différente avec zip:
for el1, el2 in zip(gen1, gen2):
print(el1, el2)
Cependant, s'il gen2a moins d'éléments, un élément supplémentaire de gen1est "consommé".
Par exemple,
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
Apparemment, une valeur manque ( 8dans mon exemple précédent) car elle gen1est lue (générant ainsi la valeur 8) avant de se rendre compte qu'elle gen2n'a plus d'éléments. Mais cette valeur disparaît dans l'univers. Quand gen2est "plus long", il n'y a pas un tel "problème".
QUESTION : Existe-t-il un moyen de récupérer cette valeur manquante (c'est- 8à- dire dans mon exemple précédent)? ... idéalement avec un nombre variable d'arguments (comme le zipfait).
REMARQUE : J'ai actuellement implémenté d'une autre manière en utilisant itertools.zip_longestmais je me demande vraiment comment obtenir cette valeur manquante en utilisant zipou équivalent.
NOTE 2 : J'ai créé quelques tests des différentes implémentations dans ce REPL au cas où vous voudriez soumettre et essayer une nouvelle implémentation :) https://repl.it/@jfthuong/MadPhysicistChester
zip()a lu à 8partir gen1, il est parti.