我有这个函数来计算素数和埃拉托森筛。我有一个错误我不明白为什么。

def era1(n):

    llista1 = []
    llista2 = []
    i = 2

    while(i<(n+1)):
        llista1.append(i)
        i = i + 1

    while (llista1[0]<(n**0.5)):
        llista2.append(llista1[0])
        for j in range ((len(llista1))-1):
            if (llista1[j] % llista1[0] == 0) :  #<------- error list index out of range
                llista1.remove(llista1[j])
        llista1.remove(llista1[0])
    print llista2

最佳答案

这是在遍历列表项时删除列表项的结果。您已经指定for循环运行n次,但当您到达第n个项时,由于要从列表中删除项,曾经存在的项已移回几个索引。
你需要重新考虑一下你重新实施筛子的方法我不能百分之百地按照你的方法去做,但我相信这可能涉及到第二个清单白名单,不要黑名单:)。
而且,enumerate()是一个很酷的函数。

10-06 08:38