深入了解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中请使用isinstance()判断变量类型
Aug 25 Python
python简单判断序列是否为空的方法
Jun 30 Python
Python中查看文件名和文件路径
Mar 31 Python
Python去除、替换字符串空格的处理方法
Apr 01 Python
python 通过类中一个方法获取另一个方法变量的实例
Jan 22 Python
详解爬虫被封的问题
Apr 23 Python
python实现文件的分割与合并
Aug 29 Python
Tensorflow累加的实现案例
Feb 05 Python
python+Selenium自动化测试——输入,点击操作
Mar 06 Python
浅谈keras 模型用于预测时的注意事项
Jun 27 Python
Python confluent kafka客户端配置kerberos认证流程详解
Oct 12 Python
用python制作个音乐下载器
Jan 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 magic_quotes_gpc的一点认识与分析
2008/08/18 PHP
PHP中iconv函数转码时截断字符问题的解决方法
2015/01/21 PHP
php截取字符串函数分享
2015/02/02 PHP
yii,CI,yaf框架+smarty模板使用方法
2015/12/29 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
javascript 模式设计之工厂模式学习心得
2010/04/27 Javascript
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
ionic隐藏tabs的方法
2016/08/29 Javascript
正则表达式替换html元素属性的方法
2016/11/26 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
Vue数据驱动模拟实现5
2017/01/13 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
Vue使用vue-cli创建项目
2017/09/01 Javascript
javascript变量提升和闭包理解
2018/03/12 Javascript
Angular Excel 导入与导出的实现代码
2019/04/17 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
对pandas写入读取h5文件的方法详解
2018/12/28 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
2019/12/09 Python
html5的localstorage详解
2017/05/09 HTML / CSS
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
软件缺陷的分类都有哪些
2014/08/22 面试题
外语专业毕业生自我评价分享
2013/10/05 职场文书
捐助贫困学生倡议书
2014/05/16 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
法人身份证明书
2014/10/08 职场文书