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

DrO*_*ine 1 python list pycharm

我正在尝试用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)
Run Code Online (Sandbox Code Playgroud)

印刷品:[...] 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
Run Code Online (Sandbox Code Playgroud)

我的推理有什么问题?

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

mst*_*rdy 5

你的清单不是2000长,你从2开始..

>>> primes=list(range(2,2001))
>>> print len(primes)
1999
Run Code Online (Sandbox Code Playgroud)

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