How to Pythonically yield all values from a list?

夙愿已清 提交于 2019-11-29 00:54:23

Use iter to create a list iterator e.g.

return iter(List)

though if you already have a list, you can just return that, which will be more efficient.

SingleNegationElimination

Since this question doesn't specify; I'll provide an answer that applies in Python >= 3.3

If you need only to return that list, do as Anurag suggests, but if for some reason the function in question really needs to be a generator, you can delegate to another generator; suppose you want to suffix the result list, but only if the list is first exhausted.

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

    if something:
        yield this
        yield that
        yield something_else

In versions of python prior to 3.3, though, you cannot use this syntax; you'll have to use the code as in the question, with a for loop and single yield statement in the body.

Alternatively; you can wrap the generators in a regular function and return the chained result: This also has the advantage of working in python 2 and 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())

You can build a generator by saying

(x for x in List)

Best Pythonically way to do this task is

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

In [2]: (x for x in my_list)
Out[2]: <generator object <genexpr> at 0x7fd9e4fdc230>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!