#python #generator
#python #генератор
Вопрос:
Допустим, у меня есть 2 следующие функции:
def get_items():
items = []
for i in xrange(2, 10):
items.append(i)
return items
def gen_items():
for i in xrange(2, 10):
yield i
Я знаю, что могу использовать их оба в цикле for следующим образом
for item in gen_items():
do something
Но теперь мне нужно инициализировать переменную как список, например
mylist = get_items()
но с помощью функции генератора. Есть ли способ сделать это без цикла for, добавляющего элементы из генератора?
Комментарии:
1.
mylist = list( get_items() )
2.
xrange
кстати, это уже генератор3.
xrange
возвращает объект, который лениво вычисляется в Python 2, какrange
функция в Python 3. Итак, если вся ваша функция генератора выполняет итерацию поxrange
объекту, тогдаlist(xrange(2, 10))
будет работать красиво.4. @Farhan. К: Я знаю, это был просто пример, объясняющий мой вопрос, у меня действительно нет такой функции в моем коде.
Ответ №1:
Встроенный список будет принимать любой итератор:
l = list(gen_items())
Ответ №2:
Вы можете просто напрямую создать его, используя list
который будет обрабатывать итерации для вас
>>> list(gen_items())
[2, 3, 4, 5, 6, 7, 8, 9]