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 gen2
a moins d'éléments, un élément supplémentaire de gen1
est "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 ( 8
dans mon exemple précédent) car elle gen1
est lue (générant ainsi la valeur 8
) avant de se rendre compte qu'elle gen2
n'a plus d'éléments. Mais cette valeur disparaît dans l'univers. Quand gen2
est "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 zip
fait).
REMARQUE : J'ai actuellement implémenté d'une autre manière en utilisant itertools.zip_longest
mais je me demande vraiment comment obtenir cette valeur manquante en utilisant zip
ou é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 à 8
partir gen1
, il est parti.