详解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计数排序和基数排序算法实例
Apr 25 Python
python中元类用法实例
Oct 10 Python
Python判断值是否在list或set中的性能对比分析
Apr 16 Python
python3实现ftp服务功能(客户端)
Mar 24 Python
Python实现的本地文件搜索功能示例【测试可用】
May 30 Python
python解析含有重复key的json方法
Jan 22 Python
基于Python的PIL库学习详解
May 10 Python
Django结合ajax进行页面实时更新的例子
Aug 12 Python
python二进制读写及特殊码同步实现详解
Oct 11 Python
python用requests实现http请求代码实例
Oct 31 Python
简单了解Python读取大文件代码实例
Dec 18 Python
用Python实现Newton插值法
Apr 17 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入门教程 精简版
2009/12/13 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
深入php中var_dump方法的使用详解
2013/06/24 PHP
php文件夹与文件目录操作函数介绍
2013/09/09 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
javascript 常用关键字列表集合
2007/12/04 Javascript
BOM与DOM的区别分析
2010/10/26 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
基于jquery点击自以外任意处,关闭自身的代码
2012/02/10 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
javascript从作用域链谈闭包
2020/07/29 Javascript
jQuery常用知识点总结以及平时封装常用函数
2016/02/23 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
vue中遇到的坑之变化检测问题(数组相关)
2017/10/13 Javascript
基于vue中css预加载使用sass的配置方式详解
2018/03/13 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
讲解python参数和作用域的使用
2013/11/01 Python
详解python之配置日志的几种方式
2017/05/22 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
django中forms组件的使用与注意
2019/07/08 Python
python英语单词测试小程序代码实例
2019/09/09 Python
Python: 传递列表副本方式
2019/12/19 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
员工考核评语大全
2014/04/26 职场文书
党章学习心得体会2016
2016/01/14 职场文书
初二数学教学反思
2016/02/17 职场文书
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
Java字符串逆序方法详情
2022/03/21 Java/Android