如何在Python中修复IndexError

时间:2019-11-12 14:59:44

标签: python

只要列表上有更大的数字,我就需要再次计数。 但是我不知道如何处理IndexError及其发生的原因。

    for i in range(len(left_days)):
        largest = left_days[0]
        count = 1
        del left_days[0]

        if(left_days[i]<=largest):
            count+= 1
            del left_days[i]
            if i == len(left_days)-1:
                answer.append(count)
            i = 0

        else left_days[i]>largest:
            answer.append(count)

这是错误。

 File "/solution_test.py", line 18, in test
   actual0 = solution(p0_0,p0_1)
 File "/solution.py", line 24, in solution
   if(left_days[i]<=largest):
IndexError: list index out of range```

2 个答案:

答案 0 :(得分:2)

问题是您遍历列表的长度,但是同时删除了列表中的项。在某些时候,您的迭代器将大于列表长度。因此发生IndexError

作为一个例子,看看这个:

x = [0,1,2,3,4,5,6,7,8,9]

for i in range(len(x)):
    del x[i]
    print(i, x)

# Out:   
0 [1, 2, 3, 4, 5, 6, 7, 8, 9]
1 [1, 3, 4, 5, 6, 7, 8, 9]
2 [1, 3, 5, 6, 7, 8, 9]
3 [1, 3, 5, 7, 8, 9]
4 [1, 3, 5, 7, 9]

IndexError: list assignment index out of range

由于IndexError现在是i,因此发生了5,但是您的列表仅剩5个元素。由于Python从0开始迭代,因此您试图删除第6个元素,该元素不存在。

答案 1 :(得分:0)

一般而言,修改要迭代的对象是非常不好的做法,尤其是在删除其内容时(关于此问题,SO中的示例太多,无法列出)。

总是,您可以迭代列表的副本以修改原始副本,或者迭代原始文件以创建/修改副本:

left_days_1 = list(left_days)
for i in range(len(left_days_1)):
    largest = left_days[0]
    count = 1
    del left_days[0]

    if(left_days_1[i]<=largest):
        count+= 1
        del left_days[i]
        if i == len(left_days)-1:
            answer.append(count)
        i = 0

    elif left_days_1[i]>largest:
        answer.append(count)