Voglio analizzare 2 generatori di (potenzialmente) diversa lunghezza con zip
:
for el1, el2 in zip(gen1, gen2):
print(el1, el2)
Tuttavia, se gen2
ha meno elementi, un elemento aggiuntivo di gen1
viene "consumato".
Per esempio,
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
Apparentemente, manca un valore ( 8
nel mio esempio precedente) perché gen1
viene letto (generando così il valore 8
) prima che si realizzi gen2
non ha più elementi. Ma questo valore scompare nell'universo. Quando gen2
è "più lungo", non esiste tale "problema".
DOMANDA : C'è un modo per recuperare questo valore mancante (cioè 8
nel mio esempio precedente)? ... idealmente con un numero variabile di argomenti (come zip
fa).
NOTA : attualmente ho implementato in un altro modo utilizzando, itertools.zip_longest
ma mi chiedo davvero come ottenere questo valore mancante utilizzando zip
o equivalente.
NOTA 2 : ho creato alcuni test delle diverse implementazioni in questo REPL nel caso in cui si desideri inviare e provare una nuova implementazione :) https://repl.it/@jfthuong/MadPhysicistChester
zip()
ha letto 8
da gen1
, non c'è più.