详解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 相关文章推荐
ansible作为python模块库使用的方法实例
Jan 17 Python
Python错误: SyntaxError: Non-ASCII character解决办法
Jun 08 Python
机器学习python实战之决策树
Nov 01 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
May 18 Python
对numpy.append()里的axis的用法详解
Jun 28 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
Oct 26 Python
python程序需要编译吗
Jun 19 Python
python中 _、__、__xx__()区别及使用场景
Jun 30 Python
详解python网络进程
Jun 15 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 Python
Python中的datetime包与time包包和模块详情
Feb 28 Python
PO模式在selenium自动化测试框架的优势
Mar 20 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正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
2013/07/03 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
js 操作css实现代码
2009/06/11 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
jquery专业的导航菜单特效代码分享
2015/08/29 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
微信QQ的二维码登录原理js代码解析
2016/06/23 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
js 点击a标签 获取a的自定义属性方法
2016/11/21 Javascript
Bootstrap的modal拖动效果
2016/12/25 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
解决layui弹出层layer的area过大被遮挡的问题
2019/09/21 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
详解Vue之事件处理
2020/07/10 Javascript
原生js实现表格循环滚动
2020/11/24 Javascript
python赋值操作方法分享
2013/03/23 Python
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
详解python中sort排序使用
2019/03/23 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
通过python检测字符串的字母
2020/02/18 Python
html5 兼容IE6结构的实现代码
2012/05/14 HTML / CSS
戴森英国官网:Dyson英国
2019/05/07 全球购物
制定岗位职责的原则
2013/11/08 职场文书
数学专业毕业生自荐信
2013/11/10 职场文书
先进典型事迹材料
2014/12/29 职场文书
委托书的样本
2015/01/28 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript