深入了解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 相关文章推荐
python获取文件版本信息、公司名和产品名的方法
Oct 05 Python
Python中基础的socket编程实战攻略
Jun 01 Python
Python字符串和字典相关操作的实例详解
Sep 23 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 Python
深入学习python多线程与GIL
Aug 26 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
Sep 07 Python
numpy 声明空数组详解
Dec 05 Python
Python使用psutil获取进程信息的例子
Dec 17 Python
django自带的权限管理Permission用法说明
May 13 Python
Python人工智能之混合高斯模型运动目标检测详解分析
Nov 07 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
实用函数2
2007/11/08 PHP
Yii2.0高级框架数据库增删改查的一些操作
2015/11/16 PHP
浅析Yii2 GridView实现下拉搜索教程
2016/04/22 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
Prototype中dom对象方法汇总
2008/09/17 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
countUp.js实现数字滚动效果
2019/10/18 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
python实现监控linux性能及进程消耗性能的方法
2014/07/25 Python
python使用wxpython开发简单记事本的方法
2015/05/20 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
Python中的集合介绍
2019/01/28 Python
Python docx库用法示例分析
2019/02/16 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
StubHub新加坡:购买和出售全球活动门票
2017/03/10 全球购物
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
考核工作实施方案
2014/03/30 职场文书
文秘专业应届生求职信
2014/05/26 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
JAVA API 实用类 String详解
2021/10/05 Java/Android
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技