Python:将迭代过程的结果作为列表输出

时间:2013-12-18 23:25:32

标签: python

def sieve(num):
    notprime = []
    for i in range(2, num+1):                   
        if i not in notprime:                        
            for k in range(i*i, num+1, i):
                notprime.append(k)
            print i

def unitTest():                                  
    sieve(1000)

这是我写的程序,用于查找素数。它工作得很好,但我希望它输出一个数字列表。例如:[2,3,5,7 ......]。我不能,为了我的生活,让这件事发生,并希望那里的人能够帮助我。

4 个答案:

答案 0 :(得分:2)

只需声明新列表primes,附加i,然后在sieve方法的末尾返回或打印列表:

def sieve(num):
    notprime = []
    primes = []
    for i in range(2, num + 1):
        if i not in notprime:
            for k in range(i * i, num + 1, i):
                notprime.append(k)
            primes.append(i)
    print primes

def unitTest():                                  
    sieve(1000)

<强>输出:

[2, 3, 5, 7, 11, 13, 17,...]

答案 1 :(得分:2)

您还可以将您的功能转换为生成器:

def sieve(num):
    notprime = []
    for i in range(2, num+1):                   
        if i not in notprime:                        
            for k in range(i*i, num+1, i):
                notprime.append(k)
            yield i

def unitTest():                                  
    list(sieve(1000))

这会节省一些内存以备将来使用(即使notprime列表更大)。

答案 2 :(得分:0)

您需要先创建列表并将每个素数附加到该列表中;与notprime列表完全一样。在完全遍历循环后,您可以打印完整列表:

def sieve(num):
    notprime = []
    prime = []
    for i in range(2, num+1):                   
        if i not in notprime:                        
            for k in range(i*i, num+1, i):
                notprime.append(k)
            prime.append(i)
    print prime

答案 3 :(得分:0)

对于那些感兴趣的人来说。

def sieve(num):         
    return sorted(set([aa for aa in range(2, num+1)]) - set([z for i in range(2, num+1) for z in list(set(range(2, num+1)) & set([k for k in range(i*i, num+1, i)]))]))