我可以从生成器中选择一个特定的项目吗?

Can I pick a specific item from generator?

与:

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() 三次?

您可以将 itertools.islicenext 结合使用。然而,这将消耗您的生成器中的步骤,因此它实际上与调用 next 三次并获取第三个值相同。这只是一种更抽象的方式。

>>> from itertools import islice
>>> g = (i for i in range(10))
>>> next(islice(g, 2, 2 + 1))
2
>>> next(g)
3