有人可以为我解释这个素数列表生成器吗?

时间:2013-08-11 13:33:25

标签: python list

这显然是一个非常快速的主要列表生成器( Fastest way to list all primes below 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部分?

1 个答案:

答案 0 :(得分:1)

看起来像是你正在寻找的数组符号。

[a] * 5变为[a,a,a,a,a]

if sieve[i/2]正在检查sieve i/2的值是True还是False

并且::定义了步幅。

请参阅this回答。