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

python基础练习题 专栏收录该内容
21 篇文章 1 订阅

很多小伙伴在利用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

 

  • 0
    点赞
  • 2
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值