详解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使用cookie库操保存cookie详解
Mar 03 Python
python smtplib模块发送SSL/TLS安全邮件实例
Apr 08 Python
列举Python中吸引人的一些特性
Apr 09 Python
简单的python后台管理程序
Apr 13 Python
Python实现简单网页图片抓取完整代码实例
Dec 15 Python
详解django.contirb.auth-认证
Jul 16 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
Python selenium的基本使用方法分析
Dec 21 Python
python脚本定时发送邮件
Dec 22 Python
使用numpngw和matplotlib生成png动画的示例代码
Jan 24 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
Jan 28 Python
python中Array和DataFrame相互转换的实例讲解
Feb 03 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
如何做到多笔资料的同步
2006/10/09 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
Bootstrap作品展示站点实战项目2
2016/10/14 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
JS为什么说async/await是generator的语法糖详解
2019/07/11 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
Django Highcharts制作图表
2016/08/27 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
python网络应用开发知识点浅析
2019/05/28 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
2020/04/10 Python
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
Ruby如何实现动态方法调用
2012/11/18 面试题
新闻学专业应届生求职信
2013/11/08 职场文书
药学专业个人的自我评价
2013/12/31 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
2015年银行信贷员工作总结
2015/05/19 职场文书
闪闪的红星观后感
2015/06/08 职场文书
红楼梦读书笔记
2015/06/25 职场文书
村官2015年度工作总结
2015/10/14 职场文书
python 遍历磁盘目录的三种方法
2021/04/02 Python
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript