python for i in a:与删除a内元素引起的bug

今天主要和大家聊聊暑假时写代码遇到的一个逻辑上的问题或者可以说是一个bug。

主要问题如下图:
在这里插入图片描述

熟悉python的读者应该会明白我的代码的含义为:逐一选择列表a中的元素,然后删除每个被选择的元素。

按照逻辑上来说,我们最后得到的a里面应该是什么也没有的。但是实际上它还会有一些元素没有删除,或者说是没有遍历到。

那么,为什么会没有被遍历到呢?这个和我们所认为的是不一样的。这个原因主要在于其内部的最基本的原理上。我也做了多次尝试,才明白其中的原理。

比较深奥的解释:里面会有一个计数器k,k从零开始,a会从列表的第k位遍历到报错为止。
这样的话,在对B进行改动的时候,B会发生一些变化,导致第k位变化了,所以会导致漏掉一些元素,没有遍历到。

为了更好的解释这个问题,我做了一张图来解释:
在这里插入图片描述

从这张图中可以比较清晰的看出为什么会有一些元素被漏掉没有遍历。

这个原因其实就是一种底层实现机制的漏洞,但是,我们在日常使用的时候还是要多避免出现逻辑上的问题,这样代码才不会出现bug。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值