详解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 实现归并排序算法
Jun 05 Python
Python中实现参数类型检查的简单方法
Apr 21 Python
如何在Python中编写并发程序
Feb 27 Python
Python学习笔记之解析json的方法分析
Apr 21 Python
python之virtualenv的简单使用方法(必看篇)
Nov 25 Python
python机器学习之决策树分类详解
Dec 20 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
Feb 13 Python
flask框架jinja2模板与模板继承实例分析
Aug 01 Python
Python中print函数简单使用总结
Aug 05 Python
Python网络编程之使用TCP方式传输文件操作示例
Nov 01 Python
Django框架配置mysql数据库实现过程
Apr 22 Python
在python中实现导入一个需要传参的模块
May 12 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中随机显示图片的函数代码
2011/06/23 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
2015/09/22 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009/08/04 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
ExtJs中简单的登录界面制作方法
2010/08/19 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
2015/10/26 Javascript
javascript基础知识
2016/06/07 Javascript
JS实现显示带倒影的图片横排居中放大展示特效实例【测试可用】
2016/08/23 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
jQuery 的 ready()的纯js替代方法
2016/11/20 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
解决qrcode.js生成二维码时必须定义一个空div的问题
2020/07/09 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
Python中函数eval和ast.literal_eval的区别详解
2017/08/10 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
python生成ppt的方法
2018/06/07 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
讲文明倡议书
2015/04/29 职场文书
铁人观后感
2015/06/16 职场文书
2019年销售人员的职业生涯规划书
2019/03/25 职场文书
Anaconda配置各版本Pytorch的实现
2021/08/07 Python
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android