超出python中的索引错误

时间:2015-10-10 16:34:34

标签: python

有人可以帮助我,为什么我摆脱了索引错误。

def subset(lst,n):
A = 0
B = 1
C = 2
for i in range(len(lst)):
    if n == lst[A]+lst[B]+lst[C]:
        return ('True')
    if n != lst[A]+lst[B]+lst[C]:
        C = C+1

我的输出低于输出。

subset([1,2,5,3],6)
Out[136]: 'True'
subset([1,2,5,3],9)
if n == lst[A]+lst[B]+lst[C]:

IndexError: list index out of range

我需要传递列表并添加三个数字并检查它是否等于n。

3 个答案:

答案 0 :(得分:1)

您没有使用i,而是添加C,这会导致错误。 也许以下是你想要的:

def subset(lst,n):
    for A in range(len(lst)-2):
        for B in range(A+1, len(lst)-1):
            for C in range(B+1, len(lst)):
                if n == lst[A]+lst[B]+lst[C]:
                    return ('True')
    return('False')

答案 1 :(得分:0)

你的行

if n != lst[A]+lst[B]+lst[C]:
        C = C+1

允许C成长。在很多情况下,由于同样的原因,此代码将失败,但是有一些特定的输入不会导致此失败,因此它不会一直这样做。您需要确保C永远不会超过列表长度 - 1

我不完全确定你要做的是什么,所以这只是你为什么会出现索引错误的直接答案。

答案 2 :(得分:0)

C = C + 1最终变为4,但[1,2,5,3]的最后一个指数为3。 这就是为什么在行n == lst [A] + lst [B] + lst [C]它失败

You may want to change you loop to:

 for i in range(len(lst)):
        if n == lst[A]+lst[B]+lst[C]:
            return True
        elif C < len(lst) -1:
            C += 1
       else:
            return False