深入了解Python中pop和remove的使用方法


Posted in Python onJanuary 09, 2018

Python关于删除list中的某个元素,一般有两种方法,pop()和remove()。

remove() 函数用于移除列表中某个值的第一个匹配项。

remove()方法语法:

list.remove(obj)

pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。

pop()方法语法:

list.pop(obj=list[-1])

如果删除单个元素,使用基本没有什么问题,具体如下。

1.pop()方法,传递的是待删除元素的index:

x = ['a', 'b', 'c', 'd']
x.pop(2)
print x
 
------------------
result:
['a', 'b', 'd']

2. remove()传递待删除元素,如果多个元素一样,默认删除第一个:

x = ['a', 'b', 'a', 'c', 'd']
x.remove('a')
print x
 
-----------------
result:
['b', 'a', 'c', 'd']

如果要循环删除符合某个条件的元素,慎用!!

x = ['a', 'b', 'c', 'd']
y = ['b', 'c']
for i in x:
  if i in y:
    x.remove(i)
print x
 
-----------------------
result:
['a', 'c', 'd']
x = ['a', 'b', 'c', 'd']
y = ['b', 'c']
for i in x:
  if i in y:
    idx = x.index(i)
    x.pop(idx)
print x
 
--------------
result:
['a', 'c', 'd']

我认为出现这种情况的主要原因是,pop和remove方法属于‘破坏性操作‘(ps:原谅我自创的定义),x.remove()后,内存中原来存放x的位置已经释放,又重新申请了内存存放新的x。可以理解为x已经不是原来的x了,而for循环中传递的x还是原来x在内存中的位置,所以在x.remove(i)后,for循环找不到x了,后面的删除即无法完成。为了完成循环删除list元素的问题,我推荐用下面的方法。

感谢也许小念旧 的提醒,原先的解释是错误的,造成上述现象的原因是因为,Python中for i in list是用迭代器实现,内部隐藏了记录当前迭代器的状态,而remove方法删除了当前元素后,迭代器自动指到下一个元素,原先的list在内存中的位置并未改变。用下面方法可以避免。

x = ['a', 'b', 'c', 'd']
y = ['b', 'c']
x_new = []
for i in x:
  if i not in y:
    x_new.append(i)
x = x_new
print x
 
----------------------
result:
['a', 'd']

同时, 可可可心一家 提出把for i in x:改成for i in x[:]:也可以实现,这是因为x[:]与x不是同一个list,相当与把x的内存拷贝到一块新的内存,当对x做remove操作的时候,新的内存list并没有受影响。

总结

以上就是本文关于深入了解Python中pop和remove的使用方法的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

Python入门之三角函数全解【收藏】》

简单了解Python中的几种函数

python正则表达式re之compile函数解析

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
wxpython 最小化到托盘与欢迎图片的实现方法
Jun 09 Python
Python标准库与第三方库详解
Jul 22 Python
Python序列操作之进阶篇
Dec 08 Python
详解python 发送邮件实例代码
Dec 22 Python
python MysqlDb模块安装及其使用详解
Feb 23 Python
python xlsxwriter库生成图表的应用示例
Mar 16 Python
PyTorch快速搭建神经网络及其保存提取方法详解
Apr 28 Python
Django中的文件的上传的几种方式
Jul 23 Python
python使用webdriver爬取微信公众号
Aug 31 Python
对numpy中向量式三目运算符详解
Oct 31 Python
Python 虚拟空间的使用代码详解
Jun 10 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
Feb 22 Python
Python使用smtp和pop简单收发邮件完整实例
Jan 09 #Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 #Python
详解python使用Nginx和uWSGI来运行Python应用
Jan 09 #Python
Python numpy实现数组合并实例(vstack,hstack)
Jan 09 #Python
运动检测ViBe算法python实现代码
Jan 09 #Python
python+opencv实现动态物体识别
Jan 09 #Python
Python设计模式之门面模式简单示例
Jan 09 #Python
You might like
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
2012/09/13 PHP
PHP Class&Object -- PHP 自排序二叉树的深入解析
2013/06/25 PHP
phpmailer中文乱码问题的解决方法
2014/04/22 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
让Firefox支持event对象实现代码
2009/11/07 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
2012/11/07 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
不得不分享的JavaScript常用方法函数集(上)
2015/12/23 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
利用yarn实现一个webpack+react种子
2016/10/25 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
对Python多线程读写文件加锁的实例详解
2019/01/14 Python
Python 绘制酷炫的三维图步骤详解
2019/07/12 Python
django如何实现视图重定向
2019/07/24 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
python脚本第一行如何写
2020/08/30 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
Anthropologie英国:美国家喻户晓的休闲服装和家居产品品牌
2018/12/05 全球购物
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
解除劳动合同协议书范本
2014/04/14 职场文书
初一学生评语大全
2014/04/24 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
小学班长竞选稿
2015/11/20 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android
java多态注意项小结
2021/10/16 Java/Android