深入了解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获取一组汉字拼音首字母的方法
Jul 01 Python
Python如何import文件夹下的文件(实现方法)
Jan 24 Python
Django中的Signal代码详解
Feb 05 Python
Python 字符串换行的多种方式
Sep 06 Python
对python中list的拷贝与numpy的array的拷贝详解
Jan 29 Python
Python-ElasticSearch搜索查询的讲解
Feb 25 Python
python3用PIL把图片转换为RGB图片的实例
Jul 04 Python
django的csrf实现过程详解
Jul 26 Python
Django框架models使用group by详解
Mar 11 Python
Python通过kerberos安全认证操作kafka方式
Jun 06 Python
keras model.fit 解决validation_spilt=num 的问题
Jun 19 Python
利用keras使用神经网络预测销量操作
Jul 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
在字符串中把网址改成超级链接
2006/10/09 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
2014/07/15 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
2018/09/07 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
JavaScript prototype属性使用说明
2010/05/13 Javascript
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
2017/02/18 Javascript
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
vue 动态修改a标签的样式的方法
2018/01/18 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
微信小程序实现即时通信聊天功能的实例代码
2018/08/17 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
2019/04/28 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
2020/08/22 Javascript
Python中的装饰器用法详解
2015/01/14 Python
对python添加模块路径的三种方法总结
2018/10/16 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
对python 调用类属性的方法详解
2019/07/02 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
详解Html5页面实现下载文件(apk、txt等)的三种方式
2018/10/22 HTML / CSS
优秀志愿者事迹材料
2014/02/03 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
法人委托书范本
2014/09/15 职场文书
司法局群众路线教育实践活动整改措施
2014/09/17 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL