今天主要和大家聊聊暑假时写代码遇到的一个逻辑上的问题或者可以说是一个bug。
主要问题如下图:
熟悉python的读者应该会明白我的代码的含义为:逐一选择列表a中的元素,然后删除每个被选择的元素。
按照逻辑上来说,我们最后得到的a里面应该是什么也没有的。但是实际上它还会有一些元素没有删除,或者说是没有遍历到。
那么,为什么会没有被遍历到呢?这个和我们所认为的是不一样的。这个原因主要在于其内部的最基本的原理上。我也做了多次尝试,才明白其中的原理。
比较深奥的解释:里面会有一个计数器k,k从零开始,a会从列表的第k位遍历到报错为止。
这样的话,在对B进行改动的时候,B会发生一些变化,导致第k位变化了,所以会导致漏掉一些元素,没有遍历到。
为了更好的解释这个问题,我做了一张图来解释:
从这张图中可以比较清晰的看出为什么会有一些元素被漏掉没有遍历。
这个原因其实就是一种底层实现机制的漏洞,但是,我们在日常使用的时候还是要多避免出现逻辑上的问题,这样代码才不会出现bug。