深入了解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 相关文章推荐
分享一个可以生成各种进制格式IP的小工具实例代码
Jul 28 Python
Python zip()函数用法实例分析
Mar 17 Python
Python 元类实例解析
Apr 04 Python
Selenium chrome配置代理Python版的方法
Nov 29 Python
Python XlsxWriter模块Chart类用法实例分析
Mar 11 Python
Python如何实现动态数组
Nov 02 Python
简单了解Pandas缺失值处理方法
Nov 16 Python
Python pandas自定义函数的使用方法示例
Nov 20 Python
python计算波峰波谷值的方法(极值点)
Feb 18 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
Jun 08 Python
浅谈Python数学建模之整数规划
Jun 23 Python
python not运算符的实例用法
Jun 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
基于mysql的bbs设计(一)
2006/10/09 PHP
php 更新数据库中断的解决方法
2009/06/05 PHP
基于curl数据采集之单页面采集函数get_html的使用
2013/04/28 PHP
Function eregi is deprecated (解决方法)
2013/06/21 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
JS定时器实例
2013/04/17 Javascript
javascript计时器事件使用详解
2014/01/07 Javascript
js中定义一个变量并判断其是否为空的方法
2014/05/13 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
javascript实现贪吃蛇游戏(娱乐版)
2020/08/17 Javascript
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
彪马美国官网:PUMA美国
2017/03/09 全球购物
餐饮加盟计划书
2014/01/10 职场文书
2014自荐信的写作技巧
2014/01/28 职场文书
建筑投标担保书
2014/05/20 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
信息技术教研组工作总结
2015/08/13 职场文书
PHP控制循环操作的时间
2021/04/01 PHP
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
2021/06/11 Python
宝塔更新Python及Flask项目的部署
2022/04/11 Python