我想用zip
解析两个(可能)不同长度的生成器:
for el1, el2 in zip(gen1, gen2):
print(el1, el2)
然而,如果"gen1
"中的一个元素消耗较少,则"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
在意识到gen2
没有更多元素之前被读取(从而生成值8
).但这个值在宇宙中消失了.当gen2
是"更长"时,就不存在这样的"问题".
QUESTION:有没有办法检索这个缺失的值(例如,在我之前的示例中为8
)...理想情况下,参数的数量是可变的(比如zip
).
NOTE: I have currently implemented in another way by using 100 but I really wonder how to get this missing value using 101 or equivalent.
NOTE 2: I have created some tests of the different implementations in this REPL in case you want to submit and try a new implementation :) 100