list.remove方法在删除元素的时候往往会出现漏删或者索引越界的情况示例如下:
漏删:
lst=[9,25,12,36]
for i in lst:
if i>10:
lst.remove(i)
print(lst)
>>>[9, 12]
那么为什么12被漏删了呢?其实原理很简单,如图:
列表从下标为0开始遍历,遍历到25时,将25删除,返回一个新的列表:
注意,原来的25对应的下标是1,所以系统会从下标为2的地方开始遍历,但是在新列表中,下标为2的地方变成了36,所以12就被跳过了。
解决方法:
只需要判断如果列表中删除元素,就要重新从0开始遍历列表。
lst=[9,25,12,36]
while True:
for i in lst:
if i>10:
lst.remove(i)
#如果删除了元素,退出此次遍历,开始遍历新列表
break
else:
break
print(lst)
>>>[9]
索引越界:
当我们用下标遍历列表时,会出现索引越界的情况,如图:
lst=[9,25,12,36]
for i in range(len(lst)):
# print(i)
if lst[i]>10:
lst.remove(lst[i])
print(lst)
IndexError: list index out of range