循环内索引2超出范围
我遇到了一个很奇怪的错误。我有一个叫做 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,但循环只执行到 223。尽管如此,它在索引为 2 的时候就已经报出“索引超出范围”的错误了!
在循环里面的 list_ 是不是没有正确指向 go() 函数里面的 list_?我完全搞不懂为什么会出现这个问题。
这个问题通过把
for i in range(1,max_):
改成
for i in list_:
1 个回答
0
你的问题是这样的:
你有一个 for
循环,它在从 list_
中删除数字。结果删除了太多数字,导致 list_
只剩下两个元素,然后当你尝试访问 list_[2]
时就出错了,因为这个位置已经不存在了。
之所以删除了这么多数字,是因为你在计算 x % 1 == 0
,这个条件对任何值的 x 都是成立的。由于你是从列表的第二个位置开始的,所以你删除了这个位置之后的所有内容。
我不太确定你具体在做什么,但无论如何,这种做法都会很慢。看起来你是在筛选质数……你可以去谷歌搜索一下“Python 找质数”之类的内容。