1

这显然是一个非常快的素数列表生成器( 列出 N 以下所有素数的最快方法),但我无法理解其中的某些部分,主要是因为语法。

def rwh_primes1(n): 
    """ Returns  a list of primes < n """
    sieve = [True] * (n/2)
    for i in xrange(3,int(n**0.5)+1,2):
        if sieve[i/2]:
            sieve[i*i/2::i] = [False] * ((n-i*i-1)/(2*i)+1)
    return [2] + [2*i+1 for i in xrange(1,n/2) if sieve[i]]

为什么sieve定义为[True](一个布尔值)乘以一个整数?

什么意思if sieve[i/2]

什么意思sieve[i*i/2::i],尤其是::i部分?

4

1 回答 1

1

看起来它只是您正在寻找的数组表示法。

[a] * 5只是变成[a,a,a,a,a]

if sieve[i/2]正在检查sieveat的值是否i/2TrueFalse

并且::定义了步幅。

看到这个答案。

于 2013-08-11T13:48:06.907 回答