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

Как Pythonically вывести все значения из списка?

Предположим, у меня есть список, который я не хочу возвращать, но чтобы получить значения из. Каков самый питонический способ сделать это?

Вот что я имею в виду. Благодаря некоторому нелазному вычислению я вычислил список ['a', 'b', 'c', 'd'], но мой код через проект использует ленивое вычисление, поэтому я хотел бы давать значения из моей функции, а не возвращать весь список.

В настоящее время я написал это как:

my_list = ['a', 'b', 'c', 'd']
for item in my_list:
    yield item

Но это не кажется мне питоническим.

4b9b3361

Ответ 1

Используйте iter для создания итератора списка, например.

return iter(List)

хотя если у вас уже есть список, вы можете просто вернуть его, что будет более эффективным.

Ответ 2

Поскольку этот вопрос не уточняет; Я дам ответ, который применяется в Python >= 3.3

Если вам нужно только вернуть этот список, сделайте как Anurag предлагает, но если по какой-то причине рассматриваемая функция действительно должна быть генератором, вы можете делегировать к другому генератору; предположим, что вы хотите суффикс списка результатов, но только если список сначала исчерпан.

def foo():
    list_ = ['a', 'b', 'c', 'd']
    yield from list_

    if something:
        yield this
        yield that
        yield something_else

В версиях python до 3.3 вы не можете использовать этот синтаксис; вам придется использовать код, как в вопросе, с выражением for и single yield в теле.

В качестве альтернативы; вы можете обернуть генераторы в регулярную функцию и вернуть результат chain: у этого также есть преимущество работы в python 2 и 3

from itertools import chain

def foo():
    list_ = ['a', 'b', 'c', 'd']

    def _foo_suffix():
        if something:
            yield this
            yield that
            yield something_else

    return chain(list_, _foo_suffix())

Ответ 3

Вы можете построить генератор, сказав

(x for x in List)

Ответ 4

Лучший питонный способ выполнения этой задачи -

In [1]: my_list = ['a', 'b', 'c', 'd']

In [2]: (x for x in my_list)
Out[2]: <generator object <genexpr> at 0x7fd9e4fdc230>