详解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采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
python实现的简单窗口倒计时界面实例
May 05 Python
浅谈python import引入不同路径下的模块
Jul 11 Python
Python编程实现使用线性回归预测数据
Dec 07 Python
python实现验证码识别功能
Jun 07 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
Jul 25 Python
Python2和3字符编码的区别知识点整理
Aug 08 Python
浅谈django url请求与数据库连接池的共享问题
Aug 29 Python
Windows下Anaconda安装、换源与更新的方法
Apr 17 Python
解决Python Matplotlib绘图数据点位置错乱问题
May 16 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
Jan 27 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
Oracle Faq(Oracle的版本)
2006/10/09 PHP
在mysql数据库原有字段后增加新内容
2009/11/26 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
2017/11/25 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
vue-cli webpack 开发环境跨域详解
2017/05/18 Javascript
详解A标签中href=""的几种用法
2017/08/20 Javascript
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
实用Javascript调试技巧分享(小结)
2019/06/18 Javascript
浅谈layer弹出层按钮颜色修改方法
2019/09/11 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
Python中用startswith()函数判断字符串开头的教程
2015/04/07 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
2019/07/23 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
python中几种自动微分库解析
2019/08/29 Python
使用CSS3来匹配横屏竖屏的简单方法
2015/08/04 HTML / CSS
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
2013/01/30 HTML / CSS
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
C和C++经典笔试题附答案解析
2014/08/18 面试题
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
工程力学专业毕业生求职信
2013/10/06 职场文书
大学生关于奋斗的演讲稿
2014/01/09 职场文书
三月学雷锋月活动总结
2014/04/28 职场文书
大专毕业生求职信
2014/07/05 职场文书
党建目标管理责任书
2014/07/25 职场文书
教师优秀党员事迹材料
2014/08/14 职场文书
喝酒驾驶检讨书
2014/10/01 职场文书
优秀班集体申报材料
2014/12/25 职场文书