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から開始するため、その位置以降はすべて削除されます。

あなたが何をしているのか正確にはわかりませんが、それが何であれ、これはそれを行うのに時間がかかるでしょう。これは、素数のスクリーニングのようなものに見えます...「Pythonで素数を見つける」などをGoogleで検索することをお勧めします。

于 2013-02-20T20:23:30.943 に答える