Quiero analizar 2 generadores de (potencialmente) diferente longitud con zip:
for el1, el2 in zip(gen1, gen2):
print(el1, el2)
Sin embargo, si gen2tiene menos elementos, gen1se "consume" un elemento adicional .
Por ejemplo,
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
Aparentemente, falta un valor ( 8en mi ejemplo anterior) porque gen1se lee (generando así el valor 8) antes de darse gen2cuenta de que no tiene más elementos. Pero este valor desaparece en el universo. Cuando gen2es "más largo", no existe tal "problema".
PREGUNTA : ¿Hay alguna forma de recuperar este valor faltante (es decir, 8en mi ejemplo anterior)? ... idealmente con un número variable de argumentos (como lo ziphace).
NOTA : Actualmente lo he implementado de otra manera usando, itertools.zip_longestpero realmente me pregunto cómo obtener este valor faltante usando zipo equivalente.
NOTA 2 : He creado algunas pruebas de las diferentes implementaciones en este REPL en caso de que desee enviar y probar una nueva implementación :) https://repl.it/@jfthuong/MadPhysicistChester
zip()haya leído 8a partir gen1, se ha ido.