在追加到列表

时间:2017-02-07 18:48:03

标签: python-3.x

def eratos(n): 
    numbers = []
    prime = [True for i in range(n+1)]
    p=2
    while(p <= n):
        if (prime[p] == True):
            for i in range(p * 2, n+1, p):
                prime[i] = False                                
        p+=1
    lis =[]

    # Print all prime numbers
    for p in range(2, n):
        if prime[p]:
            numbers.append(p)
            print(numbers)


    if __name__:
        n = 12
        eratos(n)

这将打印     而我只喜欢上一个清单[2,3,5,7,11]。 我理解for循环我将检查我的设定范围中是否有素数然后将其添加到我的列表中然后重复并检查下一个数字。如果可能的话,我希望检查范围内的所有数字,然后同时附加所有数字,或者一次追加一个,但只返回最终列表。

1 个答案:

答案 0 :(得分:0)

这是因为 print 语句在for循环中为。只需将其移到外面:

for p in range(2, n):
    if prime[p]:
        numbers.append(p)
print(numbers) # outside for loop

现在numbers列表将在for循环完成后打印。最后一句话:为什么要构建lis?你似乎永远不会使用它。

您还可以通过以下方式提高可读性(并提高效率):

def eratos(n): 
    prime = [True] * (n+1)
    for p in range(2,n+1):
        if prime[p]:
            for i in range(2*p,n+1,p):
                prime[i] = False

    # Print all prime numbers
    numbers = [p for for p in range(2,n) if prime[p]]
    print(numbers)