使用:
def merge(a, b):
i = j = 0
total = len(a) + len(b)
while i + j < total:
if j == len(b) or (i < len(a) and a[i] <= b[j]):
yield a[i]
i += 1
else:
yield b[j]
j += 1
我可以从生成器中选择第三个元素,还是必须按next()
三次迭代?
答案 0 :(得分:2)
您可以将itertools.islice
与next
结合使用。但是,这将消耗您的生成器中的步骤,因此它实际上与调用next
三次并获取第三个值相同。这只是一种更抽象的方式。
>>> from itertools import islice
>>> g = (i for i in range(10))
>>> next(islice(g, 2, 2 + 1))
2
>>> next(g)
3