Voglio analizzare 2 generatori di (potenzialmente) diversa lunghezza con zip:
for el1, el2 in zip(gen1, gen2):
print(el1, el2)
Tuttavia, se gen2ha meno elementi, un elemento aggiuntivo di gen1viene "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 ( 8nel mio esempio precedente) perché gen1viene letto (generando così il valore 8) prima che si realizzi gen2non 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è 8nel mio esempio precedente)? ... idealmente con un numero variabile di argomenti (come zipfa).
NOTA : attualmente ho implementato in un altro modo utilizzando, itertools.zip_longestma mi chiedo davvero come ottenere questo valore mancante utilizzando zipo 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 8da gen1, non c'è più.