Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python函数返回生成器而不是列表_Python_List_Python 3.x_Generator - Fatal编程技术网

Python函数返回生成器而不是列表

Python函数返回生成器而不是列表,python,list,python-3.x,generator,Python,List,Python 3.x,Generator,我想在Python中使用素数,因此使用一个函数来创建一个Eratosthenes筛: 在我看来,这个函数肯定会返回一个列表,但是当我打印Primes1000时,我只得到作为输出的结果。当使用PrintListPrime1000时,一切都按预期工作,将打印primes列表 我错过了什么 为什么函数返回的是生成器而不是列表?因为函数中使用了 在筛子中,a是一个面具,而不是最终产生的素数列表。你真的不想退回那张名单 如果希望函数返回列表而不是作为生成器,请收集函数中的素数: def primes(li

我想在Python中使用素数,因此使用一个函数来创建一个Eratosthenes筛:

在我看来,这个函数肯定会返回一个列表,但是当我打印Primes1000时,我只得到作为输出的结果。当使用PrintListPrime1000时,一切都按预期工作,将打印primes列表

我错过了什么

为什么函数返回的是生成器而不是列表?

因为函数中使用了

在筛子中,a是一个面具,而不是最终产生的素数列表。你真的不想退回那张名单

如果希望函数返回列表而不是作为生成器,请收集函数中的素数:

def primes(limit):
    a = [True] * limit
    a[0] = a[1] = False
    primes = []

    for (i, isprime) in enumerate(a):
        if isprime:
            primes.append(i)
            for n in range(i*i, limit, i):
                a[n] = False

    return primes

马蒂恩比我先到。您在return语句之前点击收益率表达式。

要返回列表,您可以:

def primes(limit):
    result = []         # Store primes here.
    a = [True] * limit
    a[0] = a[1] = False

    for (i, isprime) in enumerate(a):
        if isprime:
            result.appen(i)
            for n in range(i*i, limit, i):
                a[n] = False
    return result      # return primes

我只是有一个类似的问题,并想向你们所有人更新。如果函数在某一点产生,它将返回一个生成器,即使您希望得到一个列表。所以你需要摆脱收益率

def get_list_or_generator(return_list=True):
    items = [1, 2, 3, 4]
    if return_list:
        return items  # returns generator
    else:
        for item in items:
            yield item  # returns generator

它与listget\u list\u或作为列表的\u生成器一起工作,因为

我是盲人…:不仅是瞎子,而且是没经验的。。。你在同一个问题上赢了我两次:我建议把函数作为生成器,只有当你真的需要一个列表的时候才在上面使用list。你找到了3.3的一个新的、毫无疑问有用的特性。早期版本不允许这样做。请参阅。我在本地修改了代码以返回生成器。真的更方便。
def get_list_or_generator(return_list=True):
    items = [1, 2, 3, 4]
    if return_list:
        return items  # returns generator
    else:
        for item in items:
            yield item  # returns generator