擅长:python、mysql、java
<p>你的<code>primes_list</code>没有意义:</p>
<pre><code>def primes_list(N):
for i in range (0, N, 1):
if mask[i] == 1:
return prime_sieve(numbers[i])
</code></pre>
<p><code>mask</code>没有定义,即使您使用的是前面的掩码,它在<code>2</code>处也是真的,然后调用<code>prime_sieve(numbers[2])</code>,其中<code>numbers</code>也没有定义。如果我们进一步接受全局的<code>numbers</code>,那就给我们<code>prime_sieve[3]</code>,不管他们放了什么<code>N</code>(其中<code>N >= 3</code>)。<code>prime_sieve[3]</code>的结果是一个元组:<code>([2, 3], [1, 1])</code>。你知道吗</p>
<p>尝试:</p>
<pre><code>def primes_list(N):
nums, mask = prime_sieve(N)
return [nums[i] for i in range(len(nums)) if mask[i]]
</code></pre>
<p>它接受<code>prime_sieve</code>的结果,只返回素数:(其中<code>mask[i] == True</code>)</p>
<p>结果:<code>[2, 3, 5, 7]</code></p>