是否有任何方法可以在不循环或调用next()n次的情况下获取生成器的下n个值?生成器在这种情况下是无限的,不能转换为列表。这是生成器函数:
def f():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
以下循环都给出期望的结果,但是我想知道是否还有其他方法可以做到这一点。
gen = f()
n = 0
while n < 10:
print(next(gen))
n += 1
或..
for n, i in enumerate(f()):
if n < 10:
print(i)
else:
break
有几种方法可以做到这一点。一种方法是使用列表理解,类似于上面已经介绍的内容。例如:
gen = f()
elements = [next(gen) for _ in range(10)]
另一种方法是使用类似itertools
module的东西,例如itertools
-或takeWhile()
-功能。
也请检出islice()
。