深入了解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 XML RPC服务器端和客户端实例
Nov 22 Python
python 网络爬虫初级实现代码
Feb 27 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
Jul 11 Python
python自动发邮件库yagmail的示例代码
Feb 23 Python
对Django外键关系的描述
Jul 26 Python
使用python os模块复制文件到指定文件夹的方法
Aug 22 Python
Python图像处理库PIL中图像格式转换的实现
Feb 26 Python
完美解决keras 读取多个hdf5文件进行训练的问题
Jul 01 Python
大数据分析用java还是Python
Jul 06 Python
Python json格式化打印实现过程解析
Jul 21 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 Python
Python的scikit-image模块实例讲解
Dec 30 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程序员的13个好习惯小结
2012/02/20 PHP
php引用传值实例详解学习
2013/11/06 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
跟我学习javascript的函数调用和构造函数调用
2015/11/16 Javascript
浅析Bootstrap表格的使用
2016/06/23 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
实例解析jQuery中如何取消后续执行内容
2016/12/01 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
Python中类的定义、继承及使用对象实例详解
2015/04/30 Python
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
python中文件变化监控示例(watchdog)
2017/10/16 Python
Python_LDA实现方法详解
2017/10/25 Python
Python随机函数random()使用方法小结
2018/04/29 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
2020/06/02 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
Html5页面在微信端的分享的实现方法
2018/08/30 HTML / CSS
您的网上新华书店:文轩网
2016/08/24 全球购物
语文教育专业应届生求职信
2013/11/23 职场文书
初中女生自我鉴定
2013/12/19 职场文书
法定代表人身份证明书
2014/09/10 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
房屋维修申请报告
2015/05/18 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
雄兵连:第三季先行图公开,天使恶魔联合,银河之力的新力量
2021/06/11 国漫
「Manga Time Kirara MAX」2022年5月号封面公开
2022/03/21 日漫
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技