深入了解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实现可变变量名方法详解

    2021-04-23 11:42:49
  • php实现HTML实体编号与非ASCII字符串相互转换类实例

    2023-11-15 06:12:14
  • 从JavaScript的函数重名看其初始化方式

    2023-07-16 22:00:12
  • python3中替换python2中cmp函数的实现

    2021-08-15 01:42:41
  • 解决Python图形界面中设置尺寸的问题

    2022-11-12 12:05:02
  • js图片水平翻转后垂直翻反转的特效代码

    2009-03-06 15:33:00
  • tensorflow 自定义损失函数示例代码

    2023-03-13 21:37:18
  • 两行Python代码实现pdf转word功能

    2023-06-11 08:55:23
  • 解决Pytorch半精度浮点型网络训练的问题

    2021-10-13 17:56:45
  • python实现简单登陆系统

    2023-05-25 06:50:49
  • python可视化大屏库big_screen示例详解

    2021-10-16 14:32:39
  • 合并网页中的多个script引用实现思路及代码

    2023-06-29 09:02:19
  • python通过smpt发送邮件的方法

    2021-06-18 02:50:59
  • Python入门学习之字符串与比较运算符

    2023-10-14 22:09:40
  • python实现对变位词的判断方法

    2022-01-29 04:36:10
  • Pytorch实现常用乘法算子TensorRT的示例代码

    2021-08-17 17:49:47
  • python中的线程threading.Thread()使用详解

    2021-02-25 21:38:38
  • PyCharm永久激活方式(推荐)

    2023-06-12 00:53:33
  • php实现微信公众号主动推送消息

    2023-11-16 15:10:31
  • 分享python机器学习中应用所产生的聚类数据集方法

    2021-06-05 13:28:39
  • asp之家 网络编程 m.aspxhome.com