[英]Can someone explain this prime list generator for me?
This is apparently a very fast prime list generator ( Fastest way to list all primes below N ), but I can't understand some parts of it, mostly because of the syntax. 这显然是一个非常快速的素数列表生成器( 将所有素数列出在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]]
Why sieve
is defined as [True]
(a boolean) multiplied by an integer? 为什么将sieve
定义为[True]
(布尔值)乘以整数?
What means if sieve[i/2]
? if sieve[i/2]
是什么意思?
What means sieve[i*i/2::i]
, especially the ::i
part? sieve[i*i/2::i]
意味着什么,尤其是::i
部分?
looks like it's just array notation you're looking for. 看起来只是您要查找的数组符号。
[a] * 5
just becomes [a,a,a,a,a]
[a] * 5
变成[a,a,a,a,a]
if sieve[i/2]
is checking if the value of sieve
at i/2
is True
or False
if sieve[i/2]
正在检查i/2
处的sieve
的值为True
还是False
and the ::
defines the stride. ::
定义步幅。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.