深入了解Python中pop和remove的使用方法

作者:DebugMyself 时间:2021-02-14 00:32:43 

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入门之三角函数全解【收藏】》

简单了解Python中的几种函数

python正则表达式re之compile函数解析

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

来源:https://www.cnblogs.com/sunxiaotao/p/4462347.html

标签:python,pop,remove
0
投稿

猜你喜欢

  • python实现堆排序的实例讲解

    2023-01-06 20:50:38
  • 关于sql和mysql对于别名不能调用的一些理解

    2024-01-26 16:34:15
  • Pytorch之view及view_as使用详解

    2023-10-09 23:10:34
  • Python批量查询关键词微信指数实例方法

    2022-06-28 14:54:20
  • ASP中如何判断字符串中是否包数字

    2008-07-21 12:04:00
  • sqlserver 支持定位当前页,自定义排序的分页SQL(拒绝动态SQL)

    2024-01-16 03:58:06
  • [译]图片优化 第五章:AlphaImageLoader

    2010-08-29 18:39:00
  • python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例

    2022-01-05 19:39:44
  • 最新MySql8.27主从复制及SpringBoot项目中的读写分离实战教程

    2024-01-19 15:40:27
  • numpy系列之数组重塑的实现

    2022-10-20 13:36:35
  • numpy.ndarray 交换多维数组(矩阵)的行/列方法

    2023-01-10 05:48:48
  • 封装2个ajax函数

    2010-09-03 18:14:00
  • miniconda3介绍、安装以及使用教程

    2023-06-06 18:37:16
  • 兼容主流浏览器的JS复制内容到剪贴板

    2024-04-30 08:52:57
  • 简单了解django文件下载方式

    2022-10-31 08:48:32
  • asp error对象基础

    2008-08-04 13:25:00
  • python如何统计序列中元素

    2022-03-04 16:32:16
  • numpy 数组拷贝地址所引起的同步替换问题

    2023-11-07 18:00:06
  • python2与python3中关于对NaN类型数据的判断和转换方法

    2022-07-19 00:24:03
  • 情人节快乐! python绘制漂亮玫瑰

    2021-02-07 18:22:48
  • asp之家 网络编程 m.aspxhome.com