遍历时满足条件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])

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值