Quero analisar 2 geradores de comprimento (potencialmente) diferente com zip:
for el1, el2 in zip(gen1, gen2):
print(el1, el2)
No entanto, se gen2tiver menos elementos, um elemento extra de gen1é "consumido".
Por exemplo,
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, um valor está ausente ( 8no meu exemplo anterior) porque gen1é lido (gerando o valor 8) antes que ele perceba gen2que não possui mais elementos. Mas esse valor desaparece no universo. Quando gen2é "mais longo", não existe esse "problema".
PERGUNTA : Existe uma maneira de recuperar esse valor ausente (ou seja, 8no meu exemplo anterior)? ... idealmente com um número variável de argumentos (como zipfaz).
NOTA : No momento, eu implementei de outra maneira usando, itertools.zip_longestmas realmente me pergunto como obter esse valor ausente usando zipou equivalente.
NOTA 2 : Criei alguns testes das diferentes implementações neste REPL, caso você queira enviar e tentar uma nova implementação :) https://repl.it/@jfthuong/MadPhysicistChester
zip()tenha lido 8a partir gen1, ela se foi.