关于python中remove的一些坑小结


Posted in Python onJanuary 04, 2021

前几天,使用python时遇到这么一个需求,删除一个列表中值为1的元素。我寻思着使用remove方法,但是remove方法只会删除第一个,于是我使用for循环去删除。代码和运行结果如下:

关于python中remove的一些坑小结

当时这个结果让我很懵逼,为什么1没有被删除完?查了资料发现,是for循环捣的鬼。因为for循环实际是循环的列表下标(索引),同时由于列表的可变性,每一次删除一个元素,列表的长度就会发生变化,元素的索引也会发生变化。这里来具体分析一下这段代码:

第一次循环,循环索引为0,此时索引为0的元素是1,满足条件,因此mylist中的第一个1被删除,此时mylist变为[1,2,1,1,3,4];

第二次循环,循环索引为1,此时新列表中,索引为1的元素是2,不满足条件,mylist仍然为[1,2,1,1,3,4];

第三次循环,循环索引为2,此时列表中,索引为2的元素是1,满足条件,remove方法会再次删除一个1,但是remove会删除第一次出现的1(即删除索引为0的那个1),因此列表变为[2,1,1,3,4];

第四次循环,循环索引为3,新列表中,索引为3的元素是3,不满足条件,mylist仍然为[2,1,1,3,4];

第五次循环,循环索引为4,此时列表中,索引为4的元素是4,不满足条件,mylist仍然为[2,1,1,3,4];

此时,由于新列表长度为5,于是循环结束。

下面的截图结果能够很直观的看出来。

关于python中remove的一些坑小结

至此,如果是这样的一段代码,结果应该是怎样?

关于python中remove的一些坑小结

最终mylist=['b','d'],怎么样,和你计算的值是否一样?

回到最初的需求,要怎样才能删除所有的1,这里可以使用deepcopy来复制一份,之后一个列表用于循环,一个用于移除值。代码和结果如下:

关于python中remove的一些坑小结

这样就可以实现删除列表中的所有值为1的元素。这里可能有人会问,为什么不直接将l1赋值给一个变量,即l2=l1,这里涉及到引用和深浅复制的问题,因此不在此处解答

附:Python列表的remove方法的注意事项

关于python中remove的一些坑小结

为何没有删除列表中的全部元素?

解释:

按照执行顺序,第一个空格被删除之后,后面的元素会前移(变成['空格','空格','12','23']),指针下一次会指向新列表的第二个元素(即初始状态的第三个空格),从而初始状态的第二个空格被跳过了,初始第三个空格被删除,接着后面的元素又再次前移(变成['空格','12','23']),指针指向新列表的第三个元素,即初始状态的第5个元素23,然后23被删除了,因此只剩下['空格','12']

如果想排除初始列表中的部分元素,如何实现?

由上面的情况知道,在遍历列表的同时对列表执行删除操作,会造成意外的结果,那么对初始列表进行遍历,对初始的列表的副本执行删除操作呢?

关于python中remove的一些坑小结

以上结果显示,没有得到预期效果。为什么?

问题出在copy=ls这一句,这里仅仅是使得copy与ls指向了同一片内存(即浅拷贝,shallow copy),并没有执行【开辟一片新内存,并且ls内存中的内容复制到新内存,然后使copy指向新开辟的内存,即深拷贝,deep copy】这一系列操作。因此对copy执行的remove操作,和对遍历ls列表,实质上还是都是针对同一片内存进行操作,因此结果上一个例子类似。

若想解决这一问题,有3个办法法:

(1)

ls=[' ',' ',' ','12','23','abc','aa']
copy=[' ',' ',' ','12','23','abc','aa']

 

这一办法对于已知列表的所有元素,且元素数量较少,结构较简单时可行,其他情况下不可行。

(2)引入copy模块的deepcopy方法:

关于python中remove的一些坑小结

(3)另外准备一个空列表,遍历初始列表时,将符合条件的元素逐一加入到空列表当中(利用列表的append方法)。

这种方法,思路上与remove方法相反,但执行的操作差不多,时间复杂度也与remove方法差不多,无需引入copy模块。

另外,对于列表的remove方法,python基础教程第二版给出的说明是:

remove方法用于移除列表中某个值的第一个匹配项:

>>>x=['to','be','or','not','to','be']

>>>x.remove('be')

>>>x

['to','or','not','to','be']

到此这篇关于python中remove的一些坑小结的文章就介绍到这了,更多相关python中remove的坑内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python中定义结构体的方法
Mar 04 Python
状态机的概念和在Python下使用状态机的教程
Apr 11 Python
python制作一个桌面便签软件
Aug 09 Python
横向对比分析Python解析XML的四种方式
Mar 30 Python
django model去掉unique_together报错的解决方案
Oct 18 Python
python扫描proxy并获取可用代理ip的实例
Aug 07 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
Jul 26 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
Dec 10 Python
简单了解Django ORM常用字段类型及参数配置
Jan 07 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
Mar 04 Python
Python读取excel文件中带公式的值的实现
Apr 17 Python
python中slice参数过长的处理方法及实例
Dec 15 Python
python中remove函数的踩坑记录
Jan 04 #Python
python 日志模块logging的使用场景及示例
Jan 04 #Python
python 邮件检测工具mmpi的使用
Jan 04 #Python
Python3中的tuple函数知识点讲解
Jan 03 #Python
python中pivot()函数基础知识点
Jan 03 #Python
python regex库实例用法总结
Jan 03 #Python
Python爬虫之Selenium库的使用方法
Jan 03 #Python
You might like
PHP 魔术函数使用说明
2010/05/14 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
php随机生成数字字母组合的方法
2015/03/18 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
js使用递归解析xml
2014/12/12 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
javascript简单比较日期大小的方法
2016/01/05 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
2018/12/12 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
pyspark 读取csv文件创建DataFrame的两种方法
2018/06/07 Python
Python3使用turtle绘制超立方体图形示例
2018/06/19 Python
对numpy中二进制格式的数据存储与读取方法详解
2018/11/01 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
银河香水:Galaxy Perfume
2019/03/25 全球购物
安踏官方商城:anta.cn
2019/12/16 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
酒店拾金不昧表扬信
2014/01/18 职场文书
销售内勤岗位职责
2014/04/15 职场文书
辞职信标准格式
2015/02/27 职场文书
新闻简讯格式及范文
2015/07/22 职场文书
《落花生》教学反思
2016/02/16 职场文书