0

所以我遇到了一个非常奇怪的错误。我有一个模块 ten.py 包含

import math

def go():
    list_ = list(range(3, 100000, 2))
    max_ = int(math.sqrt(len(list_)))
    print(len(list_))
    print(max_)
    for i in range(1,max_):
        print(i)
        current = list_[i]
        for j in list_[i+1:]:
            if j % i == 0:
                list_.remove(j)
go()

输出是这样的:

49999
223
1
2
Traceback (most recent call last):
  File "D:\Documents\KomodoProjects\Project Euler\ten.py", line 14, in <module>
    go()
  File "D:\Documents\KomodoProjects\Project Euler\ten.py", line 10, in go
    current = list_[i]
IndexError: list index out of range

如您所见,列表的大小为 49999,for 循环仅达到 223。尽管如此,它已经在 index=2 处给出了超出范围的异常!

for 循环中的 list_ 是否以某种方式不引用 go() 中的 list_?我不知道为什么会出现这个问题。

通过更改修复

for i in range(1,max_):

to for i in list_:

4

1 回答 1

0

这是你的问题:

您有一个for循环从list_. 它删除了这么多list_长度为 2 的数字,然后list_[2]失败并引发异常。

它删除这么多数字的原因是您正在计算x % 1 == 0对于任何 x 值都是正确的。由于您从列表中的第 2 位开始,因此您将删除该位置之后的所有内容。

我不确定你在做什么,但这将是一种缓慢的方法,不管它是什么。这看起来有点像筛选素数……你可能想在 Google 上搜索“Python 查找素数”之类的东西。

于 2013-02-20T20:23:30.943 回答