详解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开发的nosql数据库CodernityDB介绍和使用实例
Oct 23 Python
详解Python程序与服务器连接的WSGI接口
Apr 29 Python
python获取当前日期和时间的方法
Apr 30 Python
Python中datetime常用时间处理方法
Jun 15 Python
Python实现SMTP发送邮件详细教程
Mar 02 Python
对pandas中to_dict的用法详解
Jun 05 Python
python实现NB-IoT模块远程控制
Jun 20 Python
python实现给scatter设置颜色渐变条colorbar的方法
Dec 13 Python
利用Python的sympy包求解一元三次方程示例
Nov 22 Python
python对XML文件的操作实现代码
Mar 27 Python
pandas DataFrame运算的实现
Jun 14 Python
详解Python牛顿插值法
May 11 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
PHP4之真OO
2006/10/09 PHP
Zend的AutoLoad机制介绍
2012/09/27 PHP
php使用ob_start()实现图片存入变量的方法
2014/11/14 PHP
yii通过小物件生成view的方法
2016/10/08 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
flexigrid 参数说明
2010/11/23 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
JavaScript进制转换实现方法解析
2020/01/18 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
js面向对象方式实现拖拽效果
2021/03/03 Javascript
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
Django如何自定义分页
2018/09/25 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
python算的上脚本语言吗
2020/06/22 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
军训自我鉴定200字
2014/02/13 职场文书
顶碗少年教学反思
2014/02/21 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
学术会议邀请函
2015/01/30 职场文书
2015元旦感言
2015/12/09 职场文书
javaScript Array api梳理
2021/03/31 Javascript