详解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 __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
对Python3中的print函数以及与python2的对比分析
May 02 Python
对python中array.sum(axis=?)的用法介绍
Jun 28 Python
python中的常量和变量代码详解
Jul 25 Python
基于OpenCV python3实现证件照换背景的方法
Mar 22 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
Jun 26 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
python 控制台单行刷新,多行刷新实例
Feb 19 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
python和js交互调用的方法
Jun 23 Python
Python使用sys.exc_info()方法获取异常信息
Jul 23 Python
pycharm 代码自动补全的实现方法(图文)
Sep 18 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的FTP学习(一)
2006/10/09 PHP
一个PHP模板,主要想体现一下思路
2006/12/25 PHP
PHP获得用户使用的代理服务器ip即真实ip
2006/12/31 PHP
php设计模式 Visitor 访问者模式
2011/06/28 PHP
php导出中文内容excel文件类实例
2015/07/06 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
JS 常用校验函数
2009/03/26 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
javaScript如何生成xmlhttp
2013/12/16 Javascript
javascript对中文按照拼音排序代码
2014/08/20 Javascript
jQuery焦点图切换特效代码分享
2015/09/15 Javascript
javascript实现全角转半角的方法
2016/01/23 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
2016/06/13 Javascript
js中字符型和数值型数字的互相转化方法(必看)
2017/04/25 Javascript
使用原生js封装的ajax实例(兼容jsonp)
2017/10/12 Javascript
JS实现li标签的删除
2019/04/12 Javascript
微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
2019/07/20 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
python装饰器使用方法实例
2013/11/21 Python
Python变量和字符串详解
2017/04/29 Python
python实现逻辑回归的方法示例
2017/05/02 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
纯CSS3实现图片无间断轮播效果
2016/08/25 HTML / CSS
Java如何格式化日期
2012/08/07 面试题
软件测试笔试题
2012/10/25 面试题
出口公司经理求职简历中的自我评价
2013/10/13 职场文书
商业活动邀请函
2014/02/04 职场文书
贷款委托书
2014/08/01 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
2014年加油站工作总结
2014/12/04 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
Python爬虫基础之爬虫的分类知识总结
2021/05/13 Python