如何用python依次删除列表中的元素,直到列表为空

您所在的位置:网站首页 python删除节点 如何用python依次删除列表中的元素,直到列表为空

如何用python依次删除列表中的元素,直到列表为空

2023-11-08 14:21| 来源: 网络整理| 查看: 265

很多小伙伴在利用for循环删除列表元素的时候,经常会发生删不干净的情况,这个问题真的是烧脑啊,小编我也是绞尽脑汁才想明白是怎么回事,今天就分享给大家~

例如:

你的微信好友当中有 5 个推销的,他们存在一个列表list = ['珍珠', '翡翠', '黄金', '白银', '玉石']当中,

请依次把这 5 个人分别从list当中删除,最后 list为空。(不要使用 clear)

我们通常会这样去做

list = ['珍珠', '翡翠', '黄金', '白银', '玉石'] for i in list: list.pop(0) print(list)

 执行以上脚本,输出结果如下:

['白银', '玉石']

咦?为什么会出现这样的问题呢?为什么没有达到我们预期的,想要的空列表的结果呢

 接下来咱们一步一步去分析

​ list = ['珍珠', '翡翠', '黄金', '白银', '玉石'] for i in list: print(i) # 第一次运行 此时索引为[0],i=珍珠 # 第二次运行 此时索引为[1],i=黄金 # 第三次运行 此时索引为[2],i=玉石 # 第四次运行 此时索引为[3],但是列表的长度却变成了2,没有可以打印的了,也就是没有可以删除的了,所以就退出了循环 #没有删除之前,列表是['珍珠', '翡翠', '黄金', '白银', '玉石'] list.pop(0) # 第一次 删除元素[珍珠],此时列表变为['翡翠', '黄金', '白银', '玉石'] # 第二次 删除元素[翡翠],此时列表变为['黄金', '白银', '玉石'] # 第三次 删除元素[黄金],此时列表变为[ '白银', '玉石'] print(list)# 第一次打印 list为['翡翠', '黄金', '白银', '玉石'] # 第二次打印 list为['黄金', '白银', '玉石'] #第三次次打印list为['白银', '玉石'] ​

解析:

出现这个问题的原因:是因为列表一直在变

那么为了解决这个问题,我们要做的就是:固定列表的长度

for循环里面表面是遍历序列的项目,实际上循环的变量是对应的索引,这里在for循环进行过程中 i对应的索引从0开始,每循环一次加1一次,

由于后面list的len为2,i对应的索引变成3也就退出循环了。

那么正确的写法应该是什么呢?

下面的两种方法,供大家参考

方法一:

list = ['珍珠', '翡翠', '黄金', '白银', '玉石'] for i in range(0,len(list)): list.pop() print(list)

执行以上脚本,输出结果如下:

[]

方法二:

list = ['珍珠', '翡翠', '黄金', '白银', '玉石'] for i in list[:]: list.pop() print(list)

执行以上脚本,输出结果如下:

['卖茶叶', '卖面膜', '卖保险', '卖花生'] ['卖茶叶', '卖面膜', '卖保险'] ['卖茶叶', '卖面膜'] ['卖茶叶'] []

不要在循环中删除列表,否则会有bug

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3