如何用python依次删除列表中的元素,直到列表为空 |
您所在的位置:网站首页 › python删除节点 › 如何用python依次删除列表中的元素,直到列表为空 |
很多小伙伴在利用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 |