所以我遇到了一个非常奇怪的错误。我有一个包含
的模块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_):
要 我在列表_:
答案 0 :(得分:0)
这是你的问题:
您有一个for
循环正在删除list_
中的数字。正在删除这么多数字list_
长度为2,然后list_[2]
失败并引发异常。
它删除这么多数字的原因是你正在计算x % 1 == 0
,对于x的任何值都是如此。由于您从列表中的第2位开始,因此您将删除该位置之后的所有内容。
我不确定你到底在做什么,但无论是什么,这都是一种缓慢的做法。这看起来有点像筛选素数...你可能想要谷歌搜索“Python查找素数”或其他东西。