深入了解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数据结构之Array用法实例
Oct 09 Python
朴素贝叶斯算法的python实现方法
Nov 18 Python
Python3.4编程实现简单抓取爬虫功能示例
Sep 14 Python
python实现单向链表详解
Feb 08 Python
django 在原有表格添加或删除字段的实例
May 27 Python
Python爬虫之pandas基本安装与使用方法示例
Aug 08 Python
浅谈python3发送post请求参数为空的情况
Dec 28 Python
使用python实现简单五子棋游戏
Jun 18 Python
Python 字符串类型列表转换成真正列表类型过程解析
Aug 26 Python
Python文件时间操作步骤代码详解
Apr 13 Python
vue.js刷新当前页面的实例讲解
Dec 29 Python
Python-typing: 类型标注与支持 Any类型详解
May 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
Discuz! Passport 通行证整合
2008/03/27 PHP
封装一个PDO数据库操作类代码
2009/09/09 PHP
php读取html并截取字符串的简单代码
2009/11/30 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
php从数组中随机抽取一些元素的代码
2012/11/05 PHP
php实现统计邮件大小的方法
2013/08/06 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
Prototype使用指南之ajax
2007/01/10 Javascript
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
兼容FF和IE的动态table示例自写
2013/10/21 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
JavaScript数据存储 Cookie篇
2016/07/02 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
2018/01/12 Javascript
JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】
2018/08/09 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
Python抓取手机号归属地信息示例代码
2016/11/28 Python
python中的变量如何开辟内存
2018/06/26 Python
Python中collections模块的基本使用教程
2018/12/07 Python
Python设计模式之简单工厂模式实例详解
2019/01/22 Python
Python魔法方法详解
2019/02/13 Python
ubuntu 16.04下python版本切换的方法
2019/06/14 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
2019/09/15 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
使用python计算三角形的斜边例子
2020/04/15 Python
C语言编程练习
2012/04/02 面试题
社区学习雷锋活动总结
2014/04/25 职场文书
党小组推荐意见
2015/06/02 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
《颐和园》教学反思
2016/02/19 职场文书