python教程:一个 list 使用 for 遍历,边循环边删除的问题 ...

打印 上一主题 下一主题

主题 648|帖子 648|积分 1944

今天由于要对一个 list 数据类型写一个循环删除的程序(这是小编第一次对于 list 操作),但发现一个奇异问题,来,我们来看看代码跟效果:
  1. # 初始化一个 list 列表,为了下边的方便比较,我就使用跟 list 索引来做 list 的元素
  2. datas = [0,1,2,3,4]
  3. # 打印元素组,方便比较
  4. print(datas)
  5. #使用 for 遍历
  6. for data in datas:
  7.     # 删除 list 中的元素
  8.     datas.remove(data)
  9. # 打印删除后的数组
  10. print(datas)
复制代码
我们来看这一段代码,最后的输出结果,按照我以前的经验,应该是一个空的 [] ,但结果不是:

上面的结果却告诉我们,上面的程序只删除了三个元素,并没有全部删除完,为什么呢?从上面的结果中,我们可以看出,删除的元素是 1,3,5,从这我们可以看出,原来,是 list 在 for 循环中的索引问题,我们来实时跟踪一下 list 列表在 for 中的变化:
  1. # 初始化一个 list 列表,为了下边的方便比较,我就使用跟 list 索引来做 list 的元素
  2. datas = [0,1,2,3,4]
  3. # 打印元素组,方便比较
  4. print(datas)
  5. # 记录是第几次 for 循环
  6. index = 1
  7. # 记录 datas 当前循环的下标值
  8. i = 0
  9. #使用 for 遍历
  10. for data in datas:
  11.     # 打印循环次数
  12.     print('\n这是第 %d 次循环,datas 当前在 for 循环中的下标值为:%d,删除前 datas 的元素为:' %(index, i))
  13.     # 实时打印 datas 列表
  14.     print(datas)
  15.     # 删除 list 中的元素
  16.     datas.remove(data)
  17.     # 循环次数+1
  18.     index += 1
  19.     # 索引 +1
  20.     i += 1
  21. # 最后的 datas 列表
  22. print('\n循环结束,最后的 datas 的元素为:')
  23. print(datas)
复制代码
输出结果如下:

如上图可以看出,在 for 循环中 datas 没删除一个元素,它的索引都会变化,但 for 循环中遍历的索引,总会加 1 ,所以,就会出现以上这种跳过性删除的情况。对于这种情况,小编自己想到了一个方法,我们先来看看下面的这一段程序:
  1. # 初始化一个 list 列表
  2. datas = [1,3,4,10,5,3,7,6,9,8]
  3. #使用 for 遍历
  4. for data in datas:
  5.     # 现在我们需要删除偶数的元素
  6.     if data % 2 == 0:
  7.         # 删除 datas 中的元素
  8.         datas.remove(data)
  9. # 最后的 datas 列表
  10. print('\n循环结束,最后的 datas 的元素为:')
  11. print(datas)
复制代码
我们来看看这段代码的运行结果:

我们可以看出,4 跟 10 是相邻着的,4 的下标是 2,10 的下标是 3,所以当 4 删除之后,datas 中下标为 2 的元素就变成了 10,但是,此时的 for 循环中,datas 的下标是 3 了,所以取不了 10 这个元素,这才导致了 10 没有被删除。那我们要如何来删除呢?小编的做法是这样的:
  1. '''
  2. 学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
  3. 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
  4. '''
  5. # 初始化一个 list 列表
  6. datas = [1,3,4,10,5,3,7,6,9,8]
  7. # 打印原数组元素,方便对比
  8. print('原 datas 列表的元素为:')
  9. print(datas)
  10. # 定义一个空的 list 列表,来储存要删除的 datas 的元素
  11. datas_del = []
  12. #使用 for 遍历
  13. for data in datas:
  14.     # 现在我们需要删除偶数的元素
  15.     if data % 2 == 0:
  16.         # 不直接删除,将需要删除的元素,存入 datas_del 中
  17.         datas_del.append(data)
  18. # 打印 datas_del 列表,查看要删除的元素
  19. print('\n打印 datas_del 列表,查看要删除的元素')
  20. print(datas_del)
  21. # 再执行一个 for 循环,遍历 datas_del 列表
  22. for data in datas_del:
  23.     # 删除 datas 中的元素
  24.     datas.remove(data)
  25. # 最后的 datas 列表
  26. print('\n删除后的 datas 的元素为:')
  27. print(datas)
复制代码
现在我们来执行以下上面的这段代码,是否已经可以成功的删除所要删除的元素,我们看看结果:

从上面的结果可知,我们已经成功的将我们所需要的元素删除了,这就是小编自己想到的方法。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

温锦文欧普厨电及净水器总代理

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表