详解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 条件判断的缩写方法
Sep 06 Python
Python聚类算法之基本K均值实例详解
Nov 20 Python
浅析Python基础-流程控制
Mar 18 Python
Python编程之string相关操作实例详解
Jul 22 Python
浅谈python中真正关闭socket的方法
Dec 18 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
深度辨析Python的eval()与exec()的方法
Mar 26 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
Jun 28 Python
PyCharm更改字体和界面样式的方法步骤
Sep 27 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
Jul 28 Python
Python爬虫基础之初次使用scrapy爬虫实例
Jun 26 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
如何去掉文章里的 html 语法
2006/10/09 PHP
手把手教你使用DedeCms V3的在线采集图文教程
2007/04/03 PHP
ThinkPHP中的系统常量和预定义常量集合
2014/07/01 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
使用XHProf查找PHP性能瓶颈的实例
2017/12/13 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
js文字滚动停顿效果代码
2008/06/28 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
2017/07/05 jQuery
一个简单的node.js界面实现方法
2018/06/01 Javascript
微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
2019/05/05 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
2020/02/07 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
[02:20]DOTA2亚洲邀请赛 IG战队出场宣传片
2015/02/07 DOTA
Python实现Const详解
2015/01/27 Python
python中实现k-means聚类算法详解
2017/11/11 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
python 从文件夹抽取图片另存的方法
2018/12/04 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
设置jupyter中DataFrame的显示限制方式
2020/04/12 Python
详解anaconda离线安装pytorchGPU版
2020/09/08 Python
python 利用zmail库发送邮件
2020/09/11 Python
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
幼师自我鉴定
2014/02/01 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
使用refresh_token实现无感刷新页面
2022/04/26 Javascript