这显然是一个非常快的素数列表生成器( 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]
( bool 值)乘以整数?
if sieve[i/2]
是什么意思?
sieve[i*i/2::i]
是什么意思,尤其是 ::i
部分?
最佳答案
看起来这只是您正在寻找的数组表示法。
[a] * 5
就变成了 [a,a,a,a,a]
if sieve[i/2]
正在检查 i/2
处的 sieve
值是否为 True
或 False
并且 ::
定义步幅。
参见this回答。
关于python - 有人能为我解释一下这个素数列表生成器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18172450/