列表索引超出范围内的for循环索引2

时间:2013-02-20 20:12:16

标签: python list python-3.x

所以我遇到了一个非常奇怪的错误。我有一个包含

的模块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

正如你所看到的那样,list的大小是49999而for循环只有223.尽管如此,它已经在index = 2时给出了一个超出范围异常的索引!

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

通过更改

修复
for i in range(1,max_):

要     我在列表_:

1 个答案:

答案 0 :(得分:0)

这是你的问题:

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

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

我不确定你到底在做什么,但无论是什么,这都是一种缓慢的做法。这看起来有点像筛选素数...你可能想要谷歌搜索“Python查找素数”或其他东西。