代码之家  ›  专栏  ›  技术社区  ›  Amandasaurus

获取生成器的子集

  •  21
  • Amandasaurus  · 技术社区  · 14 年前

    我有一个生成器函数,想从中得到前十项;我的第一次尝试是:

    my_generator()[:10]
    

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

    list(my_generator())[:10]
    

    [:10] 发电机?

    2 回复  |  直到 14 年前
        1
  •  29
  •   Ned Batchelder    9 年前
    import itertools
    
    itertools.islice(mygenerator(), 10)
    

    itertools 有许多用于使用迭代器的实用程序。 islice 使用start、stop和step参数对迭代器进行切片,就像对列表进行切片一样。

        2
  •  6
  •   Dustin Getz sunsations    13 年前

    澄清上述评论:

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