python循环删除列表中的元素时遇到的坑

今天在写测试用例的时候,忽然想到以前刚学python时,作过一个循环删除列表中元素的练习题,如今把当时踩的坑总结一下,但愿能对你们有所帮助。

具体的场景是这样的:python

 我当时第一次是这么写的:函数

这种写法看起来并没什么问题,获得的应该是一个空的列表,其实否则,运行后的结果是这个样子的:测试

 

 咦?究竟是哪里出了问题呢,其实只要去了解一下 for 循环的底层原理,就很容易明白:spa

data 这个列表在内存中是这样存储的:blog

 当第一次执行 for 循环时,默认删除索引为1 的元素,即删除 “卖茶叶”,删除后的列表是:索引

 当第二次执行 for 循环时,index +1,即删除索引为2 的元素,注意:这时 的 data 已经发生了变化,此时索引为 2 的元素不是“卖面膜” 而是 “卖保险”,删除后的列表是:内存

 当第三次执行 for循环时,index 在 2的基础上再加1,即删除索引为3,从上面的列表中咱们能够看到,索引为 3 的元素是“卖手机”,删除后的列表是:for循环

 

 第四次执行for 循环时,index 在3的基础上加1,即删除索引为4的元素,而这时的列表只有两个元素了,没法找到索引为4 的元素,即没法执行删除操做,因此会将列表直接打印出来。基础

那么,重点来了,怎么解决这个问题呢,仔细想一下,正序删除列表时因为每次删除一个元素后,后面的元素会顶上来,因此致使删不干净,若是咱们倒序删除呢,咱们来试一会儿:

 此次再运行后的结果是:原理

 居然真的删掉了,咱们再来详细看一下它的原理:

data 这个列表在内存中是这样存储的:

第一次执行 for 循环时,因为是倒序因此会默认删除最后一个元素,即“卖手机”,删除后的列表是:

 后面会以此类推,直到把整个列表清空。

 

最后,总结一下,在使用for 循环遍历删除列表中的元素时,必定不要用正序去遍历,用反序遍历才能达到将列表中的元素清空。

最后的最后,再为你们奉上几种其余的方法,也能够达到遍历删除列表中元素的效果哦!

方法一:注意:pop() 函数默认是删除列表的最后一个元素哦

 方法二:

 

 

 

哪怕是最没有但愿的事情,只要有一个勇敢者去坚持作,到最后就会拥有但愿。

相关文章
相关标签/搜索