深入了解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下的twisted框架入门指引
Apr 15 Python
简述Python中的进程、线程、协程
Mar 18 Python
python3新特性函数注释Function Annotations用法分析
Jul 28 Python
Python调用ctypes使用C函数printf的方法
Aug 23 Python
python中将一个全部为int的list 转化为str的list方法
Apr 09 Python
python3实现爬取淘宝美食代码分享
Sep 23 Python
python 自动重连wifi windows的方法
Dec 18 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
VScode连接远程服务器上的jupyter notebook的实现
Apr 23 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
Oct 16 Python
详解Python flask的前后端交互
Mar 31 Python
python画条形图的具体代码
Apr 20 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表单转换textarea换行符的方法
2010/09/10 PHP
php Calender(日历)代码分享
2014/01/03 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
2014/02/13 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
使用focus方法让光标默认停留在INPUT框
2014/07/29 Javascript
jQuery使用post方法提交数据实例
2015/03/25 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
js实现网页收藏功能
2015/12/17 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
2016/08/25 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
一个检测OpenSSL心脏出血漏洞的Python脚本分享
2014/04/10 Python
python通过pil模块将raw图片转换成png图片的方法
2015/03/16 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
pymysql模块的操作实例
2019/12/17 Python
Python输出指定字符串的方法
2020/02/06 Python
python 实现汉诺塔游戏
2020/11/28 Python
python FTP编程基础入门
2021/02/27 Python
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
高三地理教学反思
2014/01/11 职场文书
参观考察邀请函范文
2014/01/29 职场文书
优秀部门获奖感言
2014/02/14 职场文书
党员个人公开承诺书
2014/08/29 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
初中同学会致辞
2015/08/01 职场文书
MySQL 四种连接和多表查询详解
2021/07/16 MySQL
nginx共享内存的机制详解
2022/03/21 Servers
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android