详解Python遍历列表时删除元素的正确做法

共 1143字,需浏览 3分钟

 ·

2021-01-13 01:40

这篇文章主要介绍了详解Python遍历列表时删除元素的正确做法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一.问题描述

 这是在工作中遇到的一段代码,原理大概和下面类似(判断某一个元素是否符合要求,不符合删除该元素,最后得到符合要求的列表):

  1. = [1,2,3,4,5,6,7,8]

  2. for i in a:

  3. if i>5:

  4. pass

  5. else:

  6. a.remove(i)

  7. print(a)

运行结果:

二.问题分析

因为删除元素后,整个列表的元素会往前移动,而i却是在最初就已经确定了,是不断增大的,所以并不能得到想要的结果。

三.解决方法

1.遍历在新的列表操作,删除是在原来的列表操作

  1. = [1,2,3,4,5,6,7,8]

  2. print(id(a))

  3. print(id(a[:]))

  4. for i in a[:]:

  5. if i>5:

  6. pass

  7. else:

  8. a.remove(i)

  9. print(a)

  10. print('-------------------------')

  11. print(id(a))

运行结果:

2.filter

内建函数filter()官方文档参考:https://docs.python.org/3/library/functions.html#filter

  1. = [1,2,3,4,5,6,7,8]

  2. = filter(lambda x: x>5,a)

  3. print(list(b))

运行结果:

3.列表解析

  1. = [1,2,3,4,5,6,7,8]

  2. = [for i in a if i >5]

  3. print(b)

运行结果:

4.倒序删除

因为列表总是“向前移”,所以可以倒序遍历,即使后面的元素被修改了,还没有被遍历的元素和其坐标还是保持不变的。

  1. = [1,2,3,4,5,6,7,8]

  2. print(id(a))

  3. for i in range(len(a)-1,-1,-1):

  4. if a[i] > 5:

  5. pass

  6. else:

  7. a.remove(a[i])

  8. print(id(a))

  9. print('--------------------')

  10. print(a)

运行结果:

到此这篇关于详解Python遍历列表时删除元素的正确做法的文章就介绍到这

  1. 欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

    万水千山总是情,点个【在看】行不行

  2. *声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事

浏览 45
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报