深入了解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模块的方法详解
Sep 18 Python
python脚本爬取字体文件的实现方法
Apr 29 Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 Python
Python编程实现的图片识别功能示例
Aug 03 Python
Python绑定方法与非绑定方法详解
Aug 18 Python
Python中的id()函数指的什么
Oct 17 Python
Python实现的摇骰子猜大小功能小游戏示例
Dec 18 Python
Python判断变量名是否合法的方法示例
Jan 28 Python
解决Mac下使用python的坑
Aug 13 Python
Python绘制热力图示例
Sep 27 Python
Django 自动生成api接口文档教程
Nov 19 Python
Python操作Jira库常用方法解析
Apr 10 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
第十四节--命名空间
2006/11/16 PHP
THINKPHP项目开发中的日志记录实例分析
2014/12/01 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
学习ExtJS Window常用方法
2009/10/07 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
javascript中的正则表达式使用详解
2015/08/30 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
JS仿JQuery选择器功能
2017/03/08 Javascript
layui导航栏实现代码
2017/05/19 Javascript
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
深入了解JavaScript 私有化
2019/05/30 Javascript
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
使用python实现strcmp函数功能示例
2014/03/25 Python
selenium+python实现自动登录脚本
2018/04/22 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
2018/05/24 Python
Python占用的内存优化教程
2019/07/28 Python
Django使用unittest模块进行单元测试过程解析
2019/08/02 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
OpenCV+python实现实时目标检测功能
2020/06/24 Python
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
小学教师国培感言
2014/02/08 职场文书
辅导员评语
2014/05/04 职场文书
快递员岗位职责
2014/09/12 职场文书
法定代表人证明书
2014/11/28 职场文书
大学学生会竞选稿
2015/11/19 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
只用20行Python代码实现屏幕录制功能
2021/06/02 Python
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python