深入了解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内置函数—vars的具体使用方法
Dec 04 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
Python基于mysql实现学生管理系统
Feb 21 Python
python ddt数据驱动最简实例代码
Feb 22 Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 Python
用pycharm开发django项目示例代码
Jun 13 Python
Python读取xlsx文件的实现方法
Jul 04 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 Python
Python搭建代理IP池实现存储IP的方法
Oct 27 Python
Django Form and ModelForm的区别与使用
Dec 06 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
python爬虫请求头的使用
Dec 01 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在不同页面间传递Json数据示例代码
2013/06/08 PHP
PHP开发中常用的十个代码样例
2016/02/02 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
使用Node.js处理前端代码文件的编码问题
2016/02/16 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
js实现分割上传大文件
2016/03/09 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
编写v-for循环的技巧汇总
2020/12/01 Javascript
[46:47]完美世界DOTA2联赛PWL S2 FTD vs Magma 第二场 11.20
2020/11/23 DOTA
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
OpenCV-Python 摄像头实时检测人脸代码实例
2019/04/30 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
python为什么要安装到c盘
2020/07/20 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
大四自我鉴定范文
2013/10/06 职场文书
给公司的建议书范文
2014/05/13 职场文书
消防宣传口号
2014/06/16 职场文书
镇党政领导班子民主生活会思想汇报
2014/10/11 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
goland 恢复已更改文件的操作
2021/04/28 Golang
Vue2项目中对百度地图的封装使用详解
2022/06/16 Vue.js