我有一个生成器功能,想要从中获取前10个项目;我的第一次尝试是:
my_generator()[:10]
这不起作用,因为生成器不可订阅,因为错误告诉我。现在我已经解决了这个问题:
list(my_generator())[:10]
这可以工作,因为它将生成器转换为列表;然而,这是低效的,并且失去了拥有发电机的重点。对于生成器,是否有一些内置的,Pythonic等价的[:10]
?
答案 0 :(得分:25)
import itertools
itertools.islice(mygenerator(), 10)
itertools
有许多用于处理迭代器的实用程序。 islice
使用start,stop和step参数来切片迭代器,就像切片列表一样。
答案 1 :(得分:5)
澄清上述评论:
from itertools import islice
def fib_gen():
a, b = 1, 1
while True:
yield a
a, b = b, a + b
assert [1, 1, 2, 3, 5] == list(islice(fib_gen(), 5))