为什么会出现错误“列表索引超出范围”?

时间:2020-05-07 15:34:53

标签: python list indexing

我编写了一个程序,该程序应该打印出从0到100的所有复合数字,但是我一直收到错误“列表索引超出范围”

该如何解决?

def isPrime(x):
    if x==0:
        return False
    if x==1 or x==2:
        return True
    for i in range(2, x):
        if x%i==0:
            return False
            break
        elif x%i==1:
            return True
        else:
            print("error")

i=0

num = list(range(100))

while i<100:
    if isPrime(num[i]==True):           #I get the error here
        del (num[i])
        i += 1
    else:
        i += 1

print(num)

1 个答案:

答案 0 :(得分:0)

因为如果条件成立,您将删除元素,但仍会增加i。将您的代码更改为以下内容:

def isPrime(x):
    if x==0:
        return False
    if x==1 or x==2:
        return True
    for i in range(2, x):
        if x%i==0:
            return False
    return True

i=0
lim = 100
num = list(range(lim))

while i<lim:
    if isPrime(num[i])==True:           #I get the error here
        del (num[i])
        lim -=1
    else:
        i += 1

print(num)

顺便说一句,您的代码包含错误if isPrime(num[i]==True),我已对其进行了更改。

输出:

[0, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 38, 39, 40, 42, 44, 45, 46, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 68, 69, 70, 72, 74, 75, 76, 77, 78, 80, 81, 82, 84, 85, 86, 87, 88, 90, 91, 92, 93, 94, 95, 96, 98, 99]

由于您的isPrime算法也不正确,我已对其进行了纠正。

相关问题