python列表中remove()函数的使用方法详解
作者:士别三日wyx 发布时间:2021-05-13 22:52:46
1. 基本使用
remove() 函数可以删除列表中的指定元素
语法
list.remove( element )
参数
element:任意数据类型(数字、字符串、列表等)
2. 删除普通类型元素
删除一个列表中「存在」的数字或字符串
list1 = ['zhangsan', 'lisi', 1, 2]
list1.remove(1) # 删除数字
print(list1)
list1.remove('zhangsan') # 删除字符串
print(list1)
输出:
['zhangsan', 'lisi', 2]
['lisi', 2]
如果列表中「不存在」想要删除的元素,则会报错
list1 = [1, 2, 3]
list1.remove(4)
输出:
Traceback (most recent call last):
File "E:/data/PrCharm/test1/55.py", line 2, in <module>
list1.remove(4)
ValueError: list.remove(x): x not in list
# 值错误: 需要删除的值不在列表中
3. 删除对象类型元素
删除一个列表中「存在」的对象元素(列表、元祖等)
list1 = [1, 2, [3, 4], (5, 6)]
a = [3, 4]
b = (5, 6)
list1.remove(a) # 删除列表类型
print(list1)
list1.remove(b) # 删除元祖类型
print(list1)
输出:
[1, 2, (5, 6)]
[1, 2]
需要注意的是:remove删除对象类型的前提是,列表中的某个「元素」是对象类型,以下这种方式会报错
list1 = [1, 2, 3]
list1.remove([1,2])
输出:
Traceback (most recent call last):
File "E:/data/PrCharm/test1/55.py", line 2, in <module>
list1.remove([1,2])
ValueError: list.remove(x): x not in list
# 值错误: 需要删除的值不在列表中
4. 一次只删一个元素
上面的案例中,列表 [1, 2] 看似在列表 [1, 2, 3] 中存在,实际上, remove() 函数判断元素是否在列表中存在的标准是:匹配列表中的「单个元素」,而不是整个列表。
remove() 函数会遍历列表中的每一个元素,查看是否有元素与之匹配,匹配到相同的元素才会执行删除,这也就意味着 remove() 函数一次只能删除一个元素。
自己删自己也不行,因为自己并不在自己的元素中
list1 = [1, 2, 3, 4, 5]
print('我自己在我自己里面吗?', list1 in list1)
list1.remove(list1)
输出:
Traceback (most recent call last):
File "E:/data/PrCharm/test1/55.py", line 3, in <module>
list1.remove(list1)
ValueError: list.remove(x): x not in list
我自己在我自己里面吗? False
5、Python列表的remove方法的注意事项
为何没有删除列表中的全部元素?
解释:
按照执行顺序,第一个空格被删除之后,后面的元素会前移(变成['空格','空格','12','23']),指针下一次会指向新列表的第二个元素(即初始状态的第三个空格),从而初始状态的第二个空格被跳过了,初始第三个空格被删除,接着后面的元素又再次前移(变成['空格','12','23']),指针指向新列表的第三个元素,即初始状态的第5个元素23,然后23被删除了,因此只剩下['空格','12']
如果想排除初始列表中的部分元素,如何实现?
由上面的情况知道,在遍历列表的同时对列表执行删除操作,会造成意外的结果,那么对初始列表进行遍历,对初始的列表的副本执行删除操作呢?
以上结果显示,没有得到预期效果。为什么?
问题出在copy=ls这一句,这里仅仅是使得copy与ls指向了同一片内存(即浅拷贝,shallow copy),并没有执行【开辟一片新内存,并且ls内存中的内容复制到新内存,然后使copy指向新开辟的内存,即深拷贝,deep copy】这一系列操作。因此对copy执行的remove操作,和对遍历ls列表,实质上还是都是针对同一片内存进行操作,因此结果上一个例子类似。
若想解决这一问题,有3个办法法:
(1)
ls=[' ',' ',' ','12','23','abc','aa']
copy=[' ',' ',' ','12','23','abc','aa']
这一办法对于已知列表的所有元素,且元素数量较少,结构较简单时可行,其他情况下不可行。
(2)引入copy模块的deepcopy方法:
(3)另外准备一个空列表,遍历初始列表时,将符合条件的元素逐一加入到空列表当中(利用列表的append方法)。
这种方法,思路上与remove方法相反,但执行的操作差不多,时间复杂度也与remove方法差不多,无需引入copy模块。
另外,对于列表的remove方法,python基础教程第二版给出的说明是:
remove方法用于移除列表中某个值的第一个匹配项:
>>>x=['to','be','or','not','to','be']
>>>x.remove('be')
>>>x
['to','or','not','to','be']
来源:https://blog.csdn.net/wangyuxiang946/article/details/122145813
猜你喜欢
- 前言随着行业的发展,编程能力逐渐成为软件测试从业人员的一项基本能力。因此在笔试和面试中常常会有一定量的编码题,主要考察以下几点。基本编码能力
- 常见的SQL问题:◆选择重复,消除重复和选择出序列有例表:empemp_no name age001 Tom 17002 Sun 14003
- 本文实例讲述了python生成器用法。分享给大家供大家参考,具体如下:1. 生成器利用迭代器,我们可以在每次迭代获取数据(通过next()方
- 我将示范微优化(micro optimization)如何提升python代码5%的执行速度。5%!同时也会触怒任何维护你代码的人。但实际上
- 概述基于Swoole的websocket服务,再之前的消息系统系列的第4篇,实现了更加复杂的业务场景,是对消息推送的完善和优化,代码本身就是
- * address - 地址 * blockquote - 块引用 * center - 举中对齐块 * di
- 代码如下:--创建测试表 DECLARE @Users TABLE ( ID INT IDENTITY(1,1), UserIn
- 上一篇:微软建议的ASP性能优化28条守则(6) 技巧 20:避免在循环语句中使用字符串串联 许多人在循环语句中建立一个字符串,如下所示:
- 在日常生活中,经常会遇到需要提交身份证正反面证明资料的情况,而且这些网站大部分只接受pdf格式,这时候我们就需要把身份证正反面两张图片合成为
- 栈(Stack)在计算机领域是一个被广泛应用的集合,栈是线性集合,访问都严格地限制在一段,叫做顶(top)。 举个例子,栈就想一摞洗干净的盘
- 使用 NetBox 可以方便的将 asp 应用编译成为独立运行的执行程序,完全摆脱 iis 的束缚,在几乎所有的 Windows 版本上面直
- 在PyTorch中,torch.Tensor类是存储和变换数据的重要工具,相比于Numpy,Tensor提供GPU计算和自动求梯度等更多功能
- 关于跨域这个话题,很早就答应过要分享,但是因为懒,一直拖着,直到D2上有人谈起了“完美跨域”。“跨域”应该已经算不上什么难题了,只是提起“完
- 如下所示:# x = ['c b a',"e d f"]# y = []# for i in x:# f
- 动手写个小组件(组件入门) 这篇文章主要是为想将自己的ASP水平提高的人写的! 把ASP代码变成组件,开发者不仅是加快了ASP的速度,而且也
- 两个多月来唯一一次有时间哄么么睡觉,我先给他讲了遍《从前有座山》,还是不睡。又给他讲了这个“保安的故事”:小A是名很敬业的保安,负责保护客户
- 如何在ADSI中查询用户属性?看看下面这个返回用户可用属性的代码实例,基本上返回了大部分可用的用户属性:<%Dim x&nb
- 1. 普通装饰器 import logging1. foo = use_loggine(foo) def use_loggine(func)
- 在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread
- 本文实例讲述了Python实现模拟登录及表单提交的方法。分享给大家供大家参考。具体实现方法如下:# -*- coding: utf-8 -*