Итак, у меня возникла действительно странная ошибка. У меня есть модуль, содержащий ten.pyиндекс индекса вне диапазона внутри для цикла по индексу 2
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_ внутри цикла for каким-то образом не ссылкой на список_ внутри go()? Я понятия не имею, почему эта проблема возникает.
Зафиксировано изменение
for i in range(1,max_):
к для г в list_:
В traceback упоминается переменная 'current', но эта переменная не отображается в вашем заданном коде. Возможно, вам стоит опубликовать фактический код, который вы используете. – steveha
О, извините, я удалил эту строку, но не обновил трассировку. Редактирование сейчас. –
Также - для Euler в целом - вы можете найти это сообщение http://stackoverflow.com/questions/2068372/fastest-way-to-list-all-primes-below-n-in-python –