我有一个发电机功能,想从中得到前10个项目; 我的第一次尝试是:
my_generator()[:10]
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为生成器不是可订阅的,因为错误告诉我.现在我已经解决了这个问题:
list(my_generator())[:10]
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为它将生成器转换为列表; 然而,这是低效的,并且失去了拥有发电机的重点.是否有一些内置的,Pythonic相当于[:10]发电机?
Ned*_*der 28
import itertools
itertools.islice(mygenerator(), 10)
Run Code Online (Sandbox Code Playgroud)
itertools有许多用于处理迭代器的实用程序. islice采用start,stop和step参数来切片迭代器就像切片列表一样.
澄清上述评论:
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))
Run Code Online (Sandbox Code Playgroud)