Подтвердить что ты не робот

Получить подмножество генератора

У меня есть функция-генератор и вы хотите получить первые десять элементов; моя первая попытка:

my_generator()[:10]

Это не работает, потому что генераторы не являются подстраницами, как говорит мне ошибка. Прямо сейчас я работал с этим:

list(my_generator())[:10]

Это работает, поскольку преобразует генератор в список; однако он неэффективен и поражает точку с генератором. Есть ли встроенный питонический эквивалент [:10] для генераторов?

4b9b3361

Ответ 1

import itertools

itertools.islice(mygenerator(), 10)

itertools имеет ряд утилит для работы с итераторами. islice принимает аргументы start, stop и step для среза итератора так же, как вы нарезаете список.

Ответ 2

чтобы прояснить приведенные выше комментарии:

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