【避坑】for循环删除列表元素的注意事项--remove函数逆序删除

定义列表list_1,使用for循环删除列表中的偶数元素,即能被2整除的元素,代码如下:

# coding: utf-8

list_1 = [3, 6, 8, 9, 25, 36, 100, 105]

for item in list_1:
if item % 2 ==0:
list_1.remove(item)
print(list_1)

程序运行结果如下:

 运行结果中8、100仍然存在,没有被删除。----即删除有遗漏

原因:

因为remove()删除一个元素之后,后边的元素会自动覆盖到上一个被删除元素的位置上,此时for循环正向运行,正好会略过这个往前移的元素,继续往下走,造成遍历的遗漏。

解决方法:

逆序删除,从后向前删除,代码如下:

# coding: utf-8

list_1 = [3, 6, 8, 9, 25, 36, 100, 105]

for item in list_1[::-1]:
if item % 2 ==0:
list_1.remove(item)
print(list_1)

  运行结果中偶数元素都被删除,没有遗漏。

原文地址:https://www.cnblogs.com/beyondhd/p/15215291.html