深入了解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备份文件的脚本
Aug 11 Python
python写日志封装类实例
Jun 28 Python
Python实现字符串格式化的方法小结
Feb 20 Python
python3读取MySQL-Front的MYSQL密码
May 03 Python
python实现将读入的多维list转为一维list的方法
Jun 28 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
python Tkinter版学生管理系统
Feb 20 Python
python SQLAlchemy 中的Engine详解
Jul 04 Python
Python处理mysql特殊字符的问题
Mar 02 Python
使用python-cv2实现视频的分解与合成的示例代码
Oct 26 Python
python多线程和多进程关系详解
Dec 14 Python
Opencv 图片的OCR识别的实战示例
Mar 02 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中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
php 字符串压缩方法比较示例
2014/01/23 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
CL vs ForZe BO5 第四场 2.13
2021/03/10 DOTA
复制本贴标题和地址的js代码
2008/07/01 Javascript
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
JavaScript访问样式表代码
2010/10/15 Javascript
JQuery live函数
2010/12/24 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
深入浅析JavaScript中数据共享和数据传递
2016/04/25 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
EsLint入门学习教程
2017/02/17 Javascript
javascript实现Java中的Map对象功能的实例详解
2017/08/21 Javascript
Angularjs中ng-repeat的简单实例
2017/08/25 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
2018/08/27 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
Python中的上下文管理器和with语句的使用
2018/04/17 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
详解Python3 pickle模块用法
2019/09/16 Python
python常用运维脚本实例小结
2020/02/14 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
基于python实现音乐播放器代码实例
2020/07/01 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
一款利用html5和css3实现的3D立方体旋转效果教程
2016/04/26 HTML / CSS
大学团支书的自我评价分享
2013/12/14 职场文书
学生社团文化节开幕式主持词
2014/03/28 职场文书
《四季》教学反思
2014/04/08 职场文书
JS ES6异步解决方案
2021/04/29 Javascript