python:列表赋值索引超出范围[erathostenes的筛子]

时间:2016-03-02 17:59:34

标签: python

我从main方法调用这个类,它通过实现Erathostenes筛选来查找列表中的所有素数。但是在

nums[j] = 0

我收到上述错误:

  

列出分配索引超出范围

这是我的代码:

class Prime:

def is_prime(self, num):
    chk = False
    for i in range(2,num):
        if num % i == 0:
            chk = True
    return chk

def sieve_of_erathos(self, num):
    nums = []
    for i in range(2, num):
        nums.append(i)
    for i in range(2, num):
        if i != 0:
            for j in range(i+1, num):
                if j % i == 0:
                    nums[j] = 0
    primes = []
    for i in range (2, num):
        if nums[i] != 0:
            primes.append(nums[i])
    return primes

1 个答案:

答案 0 :(得分:0)

问题是您使用范围(2,num)填充数组。

这会在数组中创建num-2个空格,这意味着您只能调用nums[num-3]

for j in range(i+1, num):
            if j % i == 0:
                nums[j] = 0

您致电nums[num-1],请使用

for i in range(2, num+2):
        nums.append(i)

代替。一切都应该有效