Я хочу проаналізувати 2 генератори (потенційно) різної довжини з zip
:
for el1, el2 in zip(gen1, gen2):
print(el1, el2)
Однак якщо gen2
елементів менше, один додатковий елемент gen1
"споживається".
Наприклад,
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
Мабуть, значення відсутнє ( 8
у моєму попередньому прикладі), тому що gen1
прочитане (таким чином, генеруючи значення 8
) до того, як воно зрозуміє, gen2
не має більше елементів. Але ця величина зникає у Всесвіті. Коли gen2
"довше", такої "проблеми" немає.
ПИТАННЯ : Чи є спосіб отримати це відсутнє значення (тобто 8
в моєму попередньому прикладі)? ... в ідеалі зі змінною кількістю аргументів (як zip
це робиться).
ПРИМІТКА . Зараз я реалізував іншим способом за допомогою, itertools.zip_longest
але мені дуже цікаво, як отримати це відсутнє значення за допомогою zip
або еквівалента.
Примітка 2 : Я створив кілька тестів різних реалізацій в цьому реплєї в разі , якщо ви хочете , щоб представити і спробувати нову реалізацію :) https://repl.it/@jfthuong/MadPhysicistChester
zip()
прочитав 8
з gen1
, це пішло.