Python列表中remove方法的基本使用是怎样
Admin 2022-05-28 群英技术资讯 363 次浏览
remove() 函数可以删除列表中的指定元素
语法
list.remove( element )
参数
删除一个列表中「存在」的数字或字符串
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
# 值错误: 需要删除的值不在列表中
删除一个列表中「存在」的对象元素(列表、元祖等)
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
# 值错误: 需要删除的值不在列表中
上面的案例中,列表 [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
为何没有删除列表中的全部元素?
解释:
按照执行顺序,第一个空格被删除之后,后面的元素会前移(变成['空格','空格','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']
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家详细介绍了Python利用Django完整的开发一个博客系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要是为大家简单介绍一下图像添加油画特效的基本原理以及代码实现,文中的示例代码很详细,对我们学习或者工作有一点的价值,感兴趣的小伙伴可以了解一下
这篇文章主要介绍了利用Python读取CSV文件并计算某一列的均值和方差,这里利用了csv模块来对文件进行处理,文章通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
PyTorch出现平方根报错是什么原因?一些朋友遇到在使用PyTorch进行平方根计算时,出现平方根报错的情况,那么这时我们应该怎样解决呢?接下来小编就和大家一样探讨看看。
使用pyautogui库获取屏幕对应坐标。因为使用XPath无法点击到页面的播放按钮,所以使用pyautogui库进行对应位置的点击。屏幕尺寸为1920×1080,在不化Chrom浏览器的情况下,获取到播放按钮的坐标为(676, 860)运行此程序,可以每秒输出鼠标对应的位置
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008