深入了解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解析nginx日志文件
May 11 Python
python对url格式解析的方法
May 13 Python
Python3读取zip文件信息的方法
May 22 Python
Python 多线程抓取图片效率对比
Feb 27 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
Nov 21 Python
对Python 网络设备巡检脚本的实例讲解
Apr 22 Python
python爬虫的数据库连接问题【推荐】
Jun 25 Python
python使用__slots__让你的代码更加节省内存
Sep 05 Python
解决python opencv无法显示图片的问题
Oct 28 Python
python中利用matplotlib读取灰度图的例子
Dec 07 Python
python实现logistic分类算法代码
Feb 28 Python
Python的控制结构之For、While、If循环问题
Jun 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 Smarty模板生成html文档的方法
2010/04/12 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
jQuery的live()方法对hover事件的处理示例
2014/02/27 Javascript
JavaScript实现重置表单(reset)的方法
2015/04/02 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
js简单时间比较的方法
2016/08/02 Javascript
vue中将网页打印成pdf实例代码
2017/06/15 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
React-Native中禁用Navigator手势返回的示例代码
2017/09/09 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
vuex state中的数组变化监听实例
2019/11/06 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
Python自动重试HTTP连接装饰器
2015/04/28 Python
Python爬虫爬验证码实现功能详解
2016/04/14 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
纯CSS3实现滚动的齿轮动画效果
2014/06/05 HTML / CSS
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
同学会邀请函模板
2015/01/30 职场文书
海底两万里读书笔记
2015/06/26 职场文书
2015年暑期见闻
2015/07/14 职场文书
2016年大学校运会广播稿件
2015/12/21 职场文书
python如何进行基准测试
2021/04/26 Python
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript