获取生成器的子集

时间:2010-07-11 16:28:56

标签: python generator

我有一个生成器功能,想要从中获取前10个项目;我的第一次尝试是:

my_generator()[:10]

这不起作用,因为生成器不可订阅,因为错误告诉我。现在我已经解决了这个问题:

list(my_generator())[:10]

这可以工作,因为它将生成器转换为列表;然而,这是低效的,并且失去了拥有发电机的重点。对于生成器,是否有一些内置的,Pythonic等价的[:10]

2 个答案:

答案 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))