Ответ 1
import itertools
itertools.islice(mygenerator(), 10)
itertools
имеет ряд утилит для работы с итераторами. islice
принимает аргументы start, stop и step для среза итератора так же, как вы нарезаете список.
У меня есть функция-генератор и вы хотите получить первые десять элементов; моя первая попытка:
my_generator()[:10]
Это не работает, потому что генераторы не являются подстраницами, как говорит мне ошибка. Прямо сейчас я работал с этим:
list(my_generator())[:10]
Это работает, поскольку преобразует генератор в список; однако он неэффективен и поражает точку с генератором. Есть ли встроенный питонический эквивалент [:10]
для генераторов?
import itertools
itertools.islice(mygenerator(), 10)
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))