详解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对比C语言的编程思想差异
Aug 30 Python
python编程实现随机生成多个椭圆实例代码
Jan 03 Python
python 列表删除所有指定元素的方法
Apr 19 Python
Python实现高斯函数的三维显示方法
Dec 29 Python
用Python解数独的方法示例
Oct 24 Python
Window系统下Python如何安装OpenCV库
Mar 05 Python
keras:model.compile损失函数的用法
Jul 01 Python
python根据字典的键来删除元素的方法
Aug 16 Python
django使用graphql的实例
Sep 02 Python
python安装sklearn模块的方法详解
Nov 28 Python
python如何利用cv2模块读取显示保存图片
Jun 04 Python
python中取整数的几种方法
Nov 07 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
获得Google PR值的PHP代码
2007/01/28 PHP
apache中为php 设置虚拟目录
2014/12/17 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
js中hash和ico的关联分析
2015/02/05 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
基于javascript实现文字无缝滚动效果
2016/03/22 Javascript
javascript基本语法
2016/05/31 Javascript
Json解析的方法小结
2016/06/22 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
2017/07/13 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
VuePress 静态网站生成方法步骤
2019/02/14 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
2019/05/07 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
Python类的基础入门知识
2008/11/24 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
PyQt5下拉式复选框QComboCheckBox的实例
2019/06/25 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
python实现电子书翻页小程序
2019/07/23 Python
python实现canny边缘检测
2020/09/14 Python
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
大学生关于奋斗的演讲稿
2014/01/09 职场文书
工地安全检查制度
2014/02/04 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
留学推荐信中文范文
2015/03/26 职场文书
解决golang在import自己的包报错的问题
2021/04/29 Golang
解读MySQL的客户端和服务端协议
2021/05/10 MySQL
python异常中else的实例用法
2021/06/15 Python