Python: Как инициализировать список с помощью функции генератора

#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]