擅长:python、mysql、java
<p>@icedtrees答案的一个大的性能改进(至少对于<a href="http://python.org" rel="nofollow">cpython</a>)是在C级使用slice赋值将项设置为零。你知道吗</p>
<pre><code>maxPrime = int(input("What are the primes up to this number?"))
sieve = list(range(maxPrime))
for i in range(2, maxPrime):
if sieve[i]: # not removed yet = prime!
print(i)
sieve[::i] = [0] * len(sieve[::i]) # marked as not prime
</code></pre>
<p>你可以用</p>
<pre><code> sieve[i::i] = [0] * ((len(sieve)-1)//i)
</code></pre>
<p>最后一行,如果你愿意的话。你知道吗</p>
<p>我没有尝试过,但是<a href="http://pypy.org" rel="nofollow">pypy</a>在优化内部for循环方面可能做得很好,与片分配相比。你知道吗</p>