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


Posted in Python onJanuary 07, 2021

一.问题描述

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

a = [1,2,3,4,5,6,7,8]
for i in a:
  if i>5:
    pass
  else:
    a.remove(i)
  print(a)

运行结果:

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

二.问题分析

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

三.解决方法

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

a = [1,2,3,4,5,6,7,8]
print(id(a)) 
print(id(a[:])) 
for i in a[:]:
  if i>5:
    pass
  else:
    a.remove(i)
  print(a)
print('-------------------------')
print(id(a))

运行结果:

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

2.filter

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

a = [1,2,3,4,5,6,7,8]
b = filter(lambda x: x>5,a)
print(list(b))

运行结果:

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

3.列表解析

a = [1,2,3,4,5,6,7,8]
b = [i for i in a if i >5]
print(b)

运行结果:

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

4.倒序删除

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

a = [1,2,3,4,5,6,7,8]
print(id(a))
for i in range(len(a)-1,-1,-1):
  if a[i] > 5:
    pass
  else:
    a.remove(a[i])
print(id(a))
print('--------------------')
print(a)

运行结果:

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

到此这篇关于详解Python遍历列表时删除元素的正确做法的文章就介绍到这了,更多相关Python遍历列表删除元素内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python创建xml的方法
Mar 10 Python
python通过加号运算符操作列表的方法
Jul 28 Python
pandas中Timestamp类用法详解
Dec 11 Python
python3.5 tkinter实现页面跳转
Jan 30 Python
python3爬取各类天气信息
Feb 24 Python
详解Python安装scrapy的正确姿势
Jun 26 Python
python opencv将图片转为灰度图的方法示例
Jul 31 Python
Python使用get_text()方法从大段html中提取文本的实例
Aug 27 Python
python自动结束mysql慢查询会话的实例代码
Oct 27 Python
Python pip配置国内源的方法
Feb 14 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
Jan 13 Python
python实现的人脸识别打卡系统
May 08 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
Jan 06 #Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
Jan 06 #Python
python 获取谷歌浏览器保存的密码
Jan 06 #Python
python实现PolynomialFeatures多项式的方法
Jan 06 #Python
pytorch中index_select()的用法详解
Jan 06 #Python
Python之京东商品秒杀的实现示例
Jan 06 #Python
Python实现小黑屋游戏的完整实例
Jan 06 #Python
You might like
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
php微信开发之图片回复功能
2018/06/14 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
2014/05/08 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
jquery+Jscex打造游戏力度条
2020/09/12 Javascript
js断点调试心得分享(必看篇)
2017/12/08 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
angular *Ngif else用法详解
2020/12/15 Javascript
Python map和reduce函数用法示例
2015/02/26 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
python防止随意修改类属性的实现方法
2019/08/21 Python
用Python生成HTML表格的方法示例
2020/03/06 Python
pyqt5中动画的使用详解
2020/04/01 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
简单的命令查看安装的python版本号
2020/08/28 Python
运行Python编写的程序方法实例
2020/10/21 Python
利用python 下载bilibili视频
2020/11/13 Python
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
How TDD works
2012/09/30 面试题
市场营销管理毕业生自荐信
2014/03/03 职场文书
自动一体化专业求职信
2014/03/15 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
获奖感言怎么写
2015/07/31 职场文书