Skip to main content
 首页 » 编程设计

Python list.remove for 循环 "x not in list"

2025年05月04日8EasonJim

我正在尝试用 Python 创建一个素筛。

我首先制作一个从 2 到 2000 的列表。我想通过检查遍历所有素数,并从列表中删除所有素数的倍数。

我还没有绕过素数循环,但我确实有一个方法可以从数字 2 开始,然后删除它的所有倍数。

primes=list(range(2,2001)) 
p=2 
 
while p<len(primes): 
    for x in range (p*p, len(primes), p): 
        primes.remove(x) 
    print(primes) 

这会打印:[...] 1989、1991、1993、1995、1997、1999、2000]

如您所见,数字 2000 仍然存在,但不应该存在。

Traceback (most recent call last): 
  File "C:/Users/Are/PycharmProjects/Project Euler/10.py", line 8, in <module> 
    primes.remove(x) 
ValueError: list.remove(x): x not in list 

我的推理有什么问题?

我正在使用 PyCharm,有没有办法让我在出错时打印 x 的值?

请您参考如下方法:

你的列表不是 2000 长,你从 2.. 开始

>>> primes=list(range(2,2001)) 
>>> print len(primes) 
1999 

所以当你执行 while 循环时,它不会达到 2000...:)