详解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字符遍历的艺术
Sep 06 Python
python从ftp下载数据保存实例
Nov 20 Python
在Linux上安装Python的Flask框架和创建第一个app实例的教程
Mar 30 Python
Python爬虫中urllib库的进阶学习
Jan 05 Python
Python 实现12306登录功能实例代码
Feb 09 Python
python实现SOM算法
Feb 23 Python
Python中分支语句与循环语句实例详解
Sep 13 Python
用python实现刷点击率的示例代码
Feb 21 Python
python笔记之mean()函数实现求取均值的功能代码
Jul 05 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 Python
keras绘制acc和loss曲线图实例
Jun 15 Python
python使用ctypes库调用DLL动态链接库
Oct 22 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判断所处服务器操作系统的类型
2013/06/20 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
JavaScript 面向对象之命名空间
2010/05/04 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
js 获取radio按钮值的实例
2013/08/17 Javascript
方便实用的jQuery checkbox复选框全选功能简单实例
2013/10/09 Javascript
ExtJS的拖拽效果示例
2013/12/09 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
vue内置指令详解
2018/04/03 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
30分钟快速实现小程序语音识别功能
2018/11/27 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
vue+element搭建后台小总结 el-dropdown下拉功能
2020/04/10 Javascript
爬山算法简介和Python实现实例
2014/04/26 Python
Python本地与全局命名空间用法实例
2015/06/16 Python
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
运用PyTorch动手搭建一个共享单车预测器
2019/08/06 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
Python数据正态性检验实现过程
2020/04/18 Python
vscode+PyQt5安装详解步骤
2020/08/12 Python
CSS3 新增选择器的实例
2019/11/13 HTML / CSS
Html5应用程序缓存(Cache manifest)
2018/06/04 HTML / CSS
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
Servlet方面面试题
2016/09/28 面试题
军训的自我鉴定
2013/12/10 职场文书
医学生临床实习自我评价
2014/03/07 职场文书
党建工作经验交流材料
2014/05/25 职场文书