遍历时满足条件remove要谨慎

昨天,一个bug调了快一天,怎么都调不出来。让我一度以为python语言有bug,现在想想自己多么自大。以后不管再发生什么bug。一定是自己的错误,或者是对模块的使用理解有问题。

在一边遍历,一边判断满足条件删除时,不要从前面进行遍历。假设一个列表

a_list = [1,2,3,2,4]

如果遍历这个list,并且删除等于2的条目

如果这样写代码

for item in a_list:
    if item == 2:
        a_list.remove(item)

一定会出现问题的

当遍历到1时,index = 0,不会进行remove操作,到1后面的2时,index = 1,则进行删除操作,那么list会自动变为

a_list = [1,3,2,4]

同时,遍历的Index = 2,即现在的2。那么2前面的3则被跳过去了,从而得到无法预期的结果

因此可以从后面进行遍历,代码修改为如下

num = len(a_list)
for i in range(num-1, -1, -1):
    if a_list[i] == 2:
        a_list.remove(a_list[i])

这样的话就不会导致无法预期的错误

因此,进行循环删除时一定要谨慎!!!!!

猜你喜欢

转载自blog.csdn.net/ruguowoshiyu/article/details/80345828