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
原理都是一样的,这里 i 的取值为 0 1 2 3 ,当删除一个元素之后,新列表的长度减少,索引变为 0 1 2 ,但是 i 还是根据原来列表的索引取值,所以当 i 取到 3 的时候,新列表没有该元素,索引越界。
解决方法一:
lst=[25,9,12,36]

最低0.47元/天 解锁文章
1124

被折叠的 条评论
为什么被折叠?



