Я хочу проаналізувати 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, це пішло.