python list remove 删除引用_Python——list列表操作一坑(remove)
问题发生背景:在一个对象被调用多次时候对象存入了列表暂时保存(主流程不能断开使用了while True),然后实例化了大批对象,具体你可参考打飞机游戏或者坦克大战发射子弹,每个子弹一个实例,创建的多到一定时候肯定是要释放的,然后我选择了在循环操作时候销毁了对象,结果发现很诡异的是对象总会跳过一部分没法销毁;
出问题思路代码:
#简单拿列表举例具体代码暂不粘贴
list_a = [11,22,33,44,55,66,77,88,99]
for num in list_a:
#此处有其它操作使用num,此处拿print代替
print(num)
if num == 33 or num == 44:
list_a.remove(num)
#猜测一下运行结果,很多人是不是觉得print()哪里可以调用到列表中所有数据,
#还有remove会回收列表中33和44成员,那你就太年轻了,请看结果:
意识到两个bug了没?循环后调用怎么没掉(虽然只是print操作代替的,你可以想象列表里存的如果是存钱或者投资的队列,是不是很惊喜),然后不是remove回收了吗?为啥44还躺在哪里,是不是很想象的结果不一样?
具体分析:
1、列表是有序的,在使用remove方法时候判断到索引2刚好等于33,然后代码让我删除,于是代码就删除了;此时执行完成列表是【11,22, ,44,55,66,77,88,99】;
2、索引位2不能是空吧,因为你没有append操作呀,原索引位3就填充了索引位2位置没意见吧,然后此时循环指针在索引位2要进入索引位3操作是不是但是请看执行索引位3循环时候列表是【11,22,44,55,66,77,88,99】;
3、于是第一个bug产生,print时候44哪去了,已经在索引位2了呀,循环说索引位2我已经操作过了,管他谁呢我要操作索引位3了,此时索引位3是55,于是print调用结果肯定就是:11,22,33,55,66,77,88,99 ——44顺利的被忽略了吧;
4、于是这就不难解释第二个bug了,因为你现在是第三索引位循环判断取得值都是55,你让我判断是不是等于33或者等于44,我做了没肯定是做了,索引位3是55(此时索引位2才是44,而且索引位2刚才已经判断过了凭啥让我做两次上边for循环都没搞,我才不干呢)此时顺利的保留了44在列表中,最终列表结果是:【11,22,44,55,66,77,88,99】最终给你了,此时拿到操作后数据是不是很郁闷;
解决思路推荐:
1、定义新的列表,不要在循环中对同一个列表中数据删除操作;
2、判断符合条件列表的数据添加到列表;
3、循环要删除元素列表,删除其它列表数据;
具体如下:
至此问题顺利解决,只是一种思路推荐哈,有好的方法欢迎留言共同探讨;如有错误欢迎大佬指出,非常感谢;
python list remove 删除引用_Python——list列表操作一坑(remove)相关推荐
- python读取字典元素笔记_Python中列表、字典、元组数据结构的简单学习笔记
列表 列表是Python中最具灵活性的有序集合对象类型.与字符串不同的是,列表可以包含任何类型的对象:数字.字符串甚至其他列表.列表是可变对象,它支持原地修改的操作. Python的列表是: 任意对象 ...
- python中数组元素引用_python数组
## Python数组 注意:Python不具有对数组的内置支持,但是可以使用[Python列表](https://www.w3schools.com/python/python_lists.asp) ...
- python中list的意思_python中列表和集合有什么区别
列表list 字面意思就是一个集合,在Python中List中的元素用中括号[]来表示,可以这样定义一个List:L = [12, 'China', 19.998] 可以看到并不要求元素的类型都是一样 ...
- python txt提取特定数据_Python提取列表中的内容 用“python”怎么提取文件里的指定内容?...
用"python"怎么提取文件里的指定内容? python读取文件内容的方法: 一.最方便的方法是一次性读取文件中的所有内容并放置到一个大字符串中: all_the_text = ...
- python的含义和用法_python中列表的含义及用法
示例 列表是元素的集合,存储在一个变量中.列表中存储的元素类型没有限制,下面是列表的一个简单例子. students = ['bernice', 'arron', 'cody'] for studen ...
- python中字符串怎么引用_Python:字符串中引用外部变量的3种方法
方法一: username=input('username:') age=input('age:') job=input('job:') salary=input('salary') info1='' ...
- python字典如何删除数据库_Python 字典删除元素clear、pop、popitem
同其它python内建数据类型一样,字典dict也是有一些实用的操作方法.这里我们要说的是字典删除方法:clear().pop()和popitem(),这三种方法的作用不同,操作方法及返回值都不相同. ...
- python 传参数 传引用_Python 函数参数 传引用还是传值
最近学习用Python编程,但是遇到用函数处理数据的时候,对于数据的传递形式优点理解不清,以至于无法用Python使用链表等数据结构.在此特地记录几点学习经验. 总结 传值.引用这个是c/c++.ja ...
- python输出结果空格分割_python 输出列表元素实例(以空格/逗号为分隔符)
给定list,如何以空格/逗号等符号以分隔符输出呢? 一般的,简单的for循环可以打印出list的内容: l=[1,2,3,4] for i in l: print(i) 输出结果一行一个元素: 1 ...
最新文章
- 平时优化SQL的集合
- Access和SQL SERVER两种数据库的直接转换,不需要第三方工具
- zoj 3547 The Boss on Mars
- Oracle分组取出每组的第一笔数据
- Python用泰勒公式模拟函数
- 解惑:什么才是真正的迅驰2平台本本
- CSS 中文字体的英文名称对照
- ROS2学习(六).ROS概念 - 服务质量设置
- 线性表操作的基本应用
- speech production model
- npm 运行报错“Cannot find module ‘@vue/component-compiler-utils/package.json‘”
- opencv 不同边缘检测算子效果比较
- iOS平台下闪退原因汇总(一):Ran out of trampolines of type 0/1/2 运行时间错误
- ZK 数据传输四:BackingBean获取spring层类再获取数据(jsp页面或zul页面)
- 《一天搞懂深度学习》--李宏毅
- icoud邮箱无法连接服务器,icloud邮箱如何开启imap
- mysql广告投放查询_广告投放数据分析
- RPC框架的使用场景
- JavaScript+css+html鼠标指针经过某些元素时背景变色
- win7家庭版升级为Win7旗舰版
热门文章
- .NetCore+Jexus代理+Redis模拟秒杀商品活动
- .NET Core开源组件:后台任务利器之Hangfire
- 在ASP.NET Core Web API上使用Swagger提供API文档
- ASP.NET Core 中的那些认证中间件及一些重要知识点
- 05.Bootstrap导入基础笔记
- [转]Docker 大势已去,Podman 即将崛起
- [转]2020年排名前20的基于SpringBoot搭建的开源项目,帮你快速进行项目搭建!
- Android之Only fullscreen opaque activities can request orientation
- LeetCode之Remove Element
- Android之AndroidManifest.xml文件解析和权限集合