深入了解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的Django框架中为代码添加注释的方法
Jul 16 Python
使用Python脚本将文字转换为图片的实例分享
Aug 29 Python
Python中shutil模块的常用文件操作函数用法示例
Jul 05 Python
Python抓取框架 Scrapy的架构
Aug 12 Python
Python基于identicon库创建类似Github上用的头像功能
Sep 25 Python
Python绘制3d螺旋曲线图实例代码
Dec 20 Python
python通过Windows下远程控制Linux系统
Jun 20 Python
Python从Excel中读取日期一列的方法
Nov 28 Python
python提取包含关键字的整行数据方法
Dec 11 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
解决Django layui {{}}冲突的问题
Aug 29 Python
Python类中的装饰器在当前类中的声明与调用详解
Apr 15 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实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
thinkPHP自定义类实现方法详解
2016/11/30 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
javascript 节点排序 2
2011/01/31 Javascript
javascript管中窥豹 形参与实参浅析
2011/12/17 Javascript
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
javascript框架设计读书笔记之模块加载系统
2014/12/02 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
Python while 循环使用的简单实例
2016/06/08 Python
python使用tkinter实现简单计算器
2018/01/30 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
python中round函数保留两位小数的方法
2020/12/04 Python
matplotlib制作雷达图报错ValueError的实现
2021/01/05 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
如何用border-image实现文字气泡边框的示例代码
2020/01/21 HTML / CSS
新电JAVA笔试题目
2014/08/31 面试题
门卫班长岗位职责
2013/12/15 职场文书
园林资料员岗位职责
2013/12/30 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
网聊搭讪开场白
2015/05/28 职场文书
2016年“世界环境日”校园广播稿
2015/12/18 职场文书
Mysql基础之常见函数
2021/04/22 MySQL
python如何做代码性能分析
2021/04/26 Python
Python pandas之求和运算和非空值个数统计
2021/08/07 Python