Python--遍历列表时删除元素的正确做法

2023-11-01

一.问题描述

 这是在工作中遇到的一段代码,原理大概和下面类似(判断某一个元素是否符合要求,不符合删除该元素,最后得到符合要求的列表):

a = [1,2,3,4,5,6,7,8]
for i in a:
    if i>5:
        pass
    else:
        a.remove(i)
    print(a)

运行结果:

             

二.问题分析

因为删除元素后,整个列表的元素会往前移动,而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))

运行结果:

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))

运行结果:

3.列表解析

a = [1,2,3,4,5,6,7,8]
b = [i for i in a if i >5]
print(b)

运行结果:

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)

运行结果:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python--遍历列表时删除元素的正确做法 的相关文章

随机推荐

  • 前端若依框架路由跳转报错 Error: Cannot find module “@/views/xxx/xxx/xxx“

    前言 前端代码打包dist文件之后 部署后发现只有首页可以显现 然后跳转路由没生效 控制台报错 Error Cannot find module views xxx xxx xxx 原因 webpack4 不支持变量方式的动态 import
  • 十进制浮点数转成二进制(IEEE 754 在线计算器)

    IEEE 754 单精度浮点数转换 在线计算器 http www styb cn cms ieee 754 php 十进制小数的二进制表示 整数部分 除以2 取出余数 商继续除以2 直到得到0为止 将取出的余数逆序 小数部分 乘以2 然后取
  • [多尺度物体目标检测]技术概述/综述

    目录 1 绪论 1 1 引言 1 2 研究背景 1 3 研究意义 1 4 目前存在的问题 2 传统目标检测方法 2 1 HOG SVM 2 1 1 简介 2 1 2 检测流程 2 2 DPM 2 2 1 简介 2 2 2 检测流程 3 基于
  • C++拷贝构造器(Copy contructor)

    定义 由己存在的对象 创建新对象 也就是说新对象 不由构造器来构造 而是由拷贝构造器来完成 拷贝构造器的格式是固定的 class 类名 类名 const 类名 another 拷贝构造体 classA A const A another 规
  • 题目 1041: [编程入门]宏定义之找最大数

    分别用函数和带参的宏 从三个数中找出最大的数 输入格式 3个实数 输出格式 最大的数 输出两遍 先用函数 再用宏 保留3位小数 样例输入 复制 1 2 3 样例输出 复制 3 000 3 000 核心解法 我的是用三目运算符 int Max
  • feign的加解密封装

    功能描述 通过覆盖 feign codec Encoder 和 feign codec Decoder 实现 feign 请求的加解密操作 采用动态的 feignClient 调用 平台统一的通信加解密策略 同一个服务节点可以同时使用非加密
  • C++基础知识 - 类模板与静态数据成员

    类模板与静态数据成员 include
  • AUTOSAR汽车电子嵌入式编程精讲300篇-基于AUTOSAR架构的AT控制系统研究与实现

    目录 前言 国内外研究现状 国外研究现状 国内研究现状 2 AUTOSAR规范及开发流程
  • vscode clang-format不生效

    问题 ubuntu下clang format不生效 解决方法 全局搜setting json 看着哪个像 找到对应的设置文件 我的是 config Code User settings json 里面改成 editor formatOnSa
  • Redis事务——锁机制

    1 redis事务定义 1 redis事务是一个单独隔离的操作 事务中所有操作都会按顺序进行执行 事务操作过程中 不会被其他客户端发送来到命令打断 2 redis事务是将命令进行串联操作 防止有其他命令插队 2 事务执行流程 如下图 1 m
  • Threadx 定时器timer

    文章目录 定时器管理结构 定时器链表 定时器激活链表 定时器工作原理 定时器API 定时器创建 tx timer create 删除定时器 tx timer delete 修改 tx timer change Threadx 操作系统定时器
  • 微信小程序wx.request请求服务器json数据并渲染到页面

    微信小程序的数据总不能写死吧 肯定是要结合数据库来做数据更新 而小程序数据主要是json数据格式 所以我们可以利用php操作数据库 把数据以json格式数据输出即可 现在给大家讲一下微信小程序的wx request请求服务器获取数据的用法
  • 有模型强化学习总结

    有模型和无模型的区别 1 有了模型 我们可以干哪些事呢 第一 利用模型和基于模型的优化算法 我们可以得到回报高的数据 也就是好的数据 有了好的数据 我们就可以对策略网络进行稳定的训练了 第二 有了模型 我们可以充分地利用示例 demonst
  • midjourney 初级使用说明

    注册 直达官网 目前官网是可以直达的 但是Midjourney目前架设在Discord频道上 最终运行去discord 上面的 需要科学上网 自行搜索 登录到Discord 以后 就是使用的开始 使用 找到新手频道 在midjourney官
  • JS特效-星空太空效果-极简

    今天早上心血来潮 看到自己的电脑桌面是太空的界面 便有心继上次星星海特效后的再一次制作
  • 【Docker】使用 Docker Registry 搭建自己的 Docker 镜像仓库

    使用 Docker Registry 搭建自己的 Docker 镜像仓库 在使用 Docker 进行应用程序的开发和部署时 使用 Docker 镜像仓库是一个很好的实践 它允许集中存储和管理 Docker 镜像 方便团队协作和版本控制 在本
  • wireshark 流量抓包例题重现

    题目一 题目要求 1 黑客攻击的第一个受害主机的网卡IP地址 2 黑客对URL的哪一个参数实施了SQL注入 3 第一个受害主机网站数据库的表前缀 加上下划线例如abc 4 第一个受害主机网站数据库的名字 看到题目SQL注入 那就首先过滤ht
  • Springboot项目打war包部署到外置tomcat容器【详解版】

    一 修改打包方式
  • 维金细说“virtualization”

    摘要 在这个时代下 虚拟化已经成为毋庸置疑的主角 虚拟化对生活的影响也是方方面面的 熟悉 网络虚拟化的朋友知道 这是一种基于软件的 抽象的 从物理元素中分离流量的一种方式 近年来 随着云计算和大数据的诞生和飞速发展 各种虚拟化技术也好似 雨
  • Python--遍历列表时删除元素的正确做法

    一 问题描述 这是在工作中遇到的一段代码 原理大概和下面类似 判断某一个元素是否符合要求 不符合删除该元素 最后得到符合要求的列表 a 1 2 3 4 5 6 7 8 for i in a if i gt 5 pass else a rem