只要列表上有更大的数字,我就需要再次计数。 但是我不知道如何处理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```
答案 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)