这显然是一个非常快速的主要列表生成器( 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
部分?
答案 0 :(得分:1)
看起来像是你正在寻找的数组符号。
[a] * 5
变为[a,a,a,a,a]
if sieve[i/2]
正在检查sieve
i/2
的值是True
还是False
并且::
定义了步幅。
请参阅this回答。