详解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中zfill()方法的使用教程
May 20 Python
python 2.6.6升级到python 2.7.x版本的方法
Oct 09 Python
Python 含参构造函数实例详解
May 25 Python
python实现简易版计算器
Jun 22 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
Apr 17 Python
Python解决八皇后问题示例
Apr 22 Python
python使用wxpy轻松实现微信防撤回的方法
Feb 21 Python
python3的print()函数的用法图文讲解
Jul 16 Python
TensorFlow加载模型时出错的解决方式
Feb 06 Python
python 项目目录结构设置
Feb 14 Python
PyQt5 如何让界面和逻辑分离的方法
Mar 24 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
Apr 17 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服务器实现多session并发运行
2006/10/09 PHP
php学习之数据类型之间的转换介绍
2011/06/09 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
PHP临时文件的安全性分析
2014/07/04 PHP
php构造函数的继承方法
2015/02/09 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
escape函数解决js中ajax传递中文出现乱码问题
2014/10/30 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
2017/06/02 jQuery
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
原生javascript实现连连看游戏
2019/01/03 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
使用nodejs实现JSON文件自动转Excel的工具(推荐)
2020/06/24 NodeJs
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
详解Python中的测试工具
2019/06/09 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
Python如何执行系统命令
2020/09/23 Python
python中uuid模块实例浅析
2020/12/29 Python
HTML+CSS+JavaScript实现图片3D展览的示例代码
2020/10/12 HTML / CSS
瑞贝卡·泰勒官方网站:Rebecca Taylor
2016/09/24 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
爱情检讨书大全
2014/01/21 职场文书
学校政风行风自查自纠报告
2014/10/21 职场文书
三方股东合作协议书
2014/10/28 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
SQL Server表分区删除详情
2021/10/16 SQL Server