我可以从生成器中选择一个特定的项目吗?
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.islice
与 next
结合使用。然而,这将消耗您的生成器中的步骤,因此它实际上与调用 next
三次并获取第三个值相同。这只是一种更抽象的方式。
>>> from itertools import islice
>>> g = (i for i in range(10))
>>> next(islice(g, 2, 2 + 1))
2
>>> next(g)
3
与:
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.islice
与 next
结合使用。然而,这将消耗您的生成器中的步骤,因此它实际上与调用 next
三次并获取第三个值相同。这只是一种更抽象的方式。
>>> from itertools import islice
>>> g = (i for i in range(10))
>>> next(islice(g, 2, 2 + 1))
2
>>> next(g)
3