详解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中的__slots__使用示例
Feb 26 Python
设计模式中的原型模式在Python程序中的应用示例
Mar 02 Python
Python3连接MySQL(pymysql)模拟转账实现代码
May 24 Python
python+django快速实现文件上传
Oct 24 Python
基于Python代码编辑器的选用(详解)
Sep 13 Python
Python numpy 常用函数总结
Dec 07 Python
让你Python到很爽的加速递归函数的装饰器
May 26 Python
django如何实现视图重定向
Jul 24 Python
使用pycharm在本地开发并实时同步到服务器
Aug 02 Python
如何在Django配置文件里配置session链接
Aug 06 Python
Python基于pip实现离线打包过程详解
May 15 Python
Python2手动安装更新pip过程实例解析
Jul 16 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设计模式之解释器模式的深入解析
2013/06/13 PHP
php版微信发红包接口用法示例
2016/09/23 PHP
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
Javascript 读后台cookie代码
2008/09/15 Javascript
Javascript 面向对象 对象(Object)
2010/05/13 Javascript
JavaScript全局函数使用简单说明
2011/03/11 Javascript
js多级树形弹出一个小窗口层(非常好用)实例代码
2013/03/19 Javascript
向当前style sheet中插入一个新的style实现方法
2013/04/01 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
JavaScript中使用自然对数ln的方法
2015/06/14 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
jquery实现左右无缝轮播图
2020/07/31 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
2017/01/11 Javascript
详解Angular.js指令中scope类型的几种特殊情况
2017/02/21 Javascript
jQuery事件对象的属性和方法详解
2017/09/09 jQuery
vue-cli配置文件——config篇
2018/01/04 Javascript
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
js最实用string(字符串)类型的使用及截取与拼接详解
2019/04/26 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
Python英文文本分词(无空格)模块wordninja的使用实例
2019/02/20 Python
python求加权平均值的实例(附纯python写法)
2019/08/22 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
解决tensorflow打印tensor有省略号的问题
2020/02/04 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
意大利网上药房:Farmacia 33
2020/01/27 全球购物
CLR与IL分别是什么含义
2016/08/23 面试题
2014年依法行政工作总结
2014/11/19 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书