Python列表中多元素删除(移除)的实现
作者:TonyX2 发布时间:2023-12-28 03:45:11
问题背景
a=[1,4,2,1,5,6,9,0]
#删除列表中的元素,其所在的位置为[1,3,7]
del_index=[1,3,7]
tmp=[i for num,i in enumerate(a) if num not in del_index]
print(f"最终结果:{tmp}")
结果:
最终结果:[1, 2, 5, 6, 9]
目的是实现List中的多个元素的移除(单个元素的比较简单,这里不做过多赘述)。而多元素的删除,可以归纳为以下两类:
实现方法
1. 使用枚举法
直接使用枚举,然后判断索引在不在删除索引里面即可。
[i for num,i in enumerate(a) if num not in del_index]
2. python中List的内置方法
使用内置方法remove移除或pop,但是每次只能移除一个。具体的函数差异:
#pop
L.pop([index]) -> item -- remove and return item at index (default last).#(从后往前,有返回值)
#输入为:元素所在的索引
#remove:
L.remove(value) -> None -- remove first occurrence of value.
#(无返回值)
#输入为具体的元素,重复的元素首先移除第一个
若直接使用for循环直接使用上述函数,就会报错!!!比如:
--------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-25-364cdd187e0c> in <module>
4 b=a.copy()
5 for i in del_index:
----> 6 b.remove(b[i])# b.pop(i)
7 print(b)
8IndexError: list index out of range
改进:
(1) pop
b=a.copy()
for num,i in enumerate(del_index):
print(f"{b},被移除的元素:{a[i]}")
b.pop(i-num)
print(f"最终结果:{b}")
结果与枚举法结果一致。
(2) remove
c=a.copy()
for num,i in enumerate(del_index):
print(f"{c},被移除的元素:{a[i]}")
c.remove(c[i-num])#重复元素
print(f"最终结果:{c}")
输出结果:
[1, 4, 2, 1, 5, 6, 9, 0],被移除的元素:4
[1, 2, 1, 5, 6, 9, 0],被移除的元素:1
[2, 1, 5, 6, 9, 0],被移除的元素:0
最终结果:[2, 1, 5, 6, 9]
remove后的结果与上述方法的结果不一致.主要原因是重复值的问题,a[3]=1,a[0]=1,所以在移除元素4后,原列表变成[1, 2, 1, 5, 6, 9, 0].移除元素1时,本应该移除的是4右侧的1,但是由于remove的默认属性,它会选择第一次出现的1进行移除。虽然得到的结果值一样,但是元素的索引与其它方法的结果不一致。
结论
就最终结果而言,枚举法和pop法不受重复值的影响;而remove容易受重复值的影响。
若最终结果不受顺序影响,三者的差异可以忽略不计。
来源:https://www.cnblogs.com/tonyxiao/p/14378007.html
猜你喜欢
- 前些日子在SmashingMagazine看到一篇关于CSS3新技术不错的文章,它详细介绍了CSS3的新特性和它的使用方法,它包括:浏览器专
- 你的SQL Server最近是否运行不正常?不,我指的不是我们肯定会遇到的通常的数据库和操作系统问题。我的意思是,你是否经历过服务器的反应迟
- //匹配中文 数字 字母 下划线 var checkIn
- 我们已经知道Application和Session对象的OnStart、OnEnd事件的脚本,都必须是在 Global.asa&n
- 今天要做个搜索,用到了时间比较函数!以前多是直接比较时间,查询语句有长效率又不高~~~后来用了DateDiff函数,在调试的时候发现了一些问
- 当我们的文章表中没有对于文章的评论数字段时,我们该这么写sql语句来显示出评论最多的文章呢?下面本站给大家收集了几种方法,仅供参考:1.se
- 一、Python中的对象Python中一切皆是对象。————Guido van Rossum(1989)这句话只要你学过python,你就很
- 今天将webserice里面的一个代码,拷到一个C#类,结果运行编译错误。DataBase = Server.MapPath("d
- 有些网页制 * 好者提出了这样一个问题——怎么使用Dreamweaver制作出交换图像来。今天,我向大家介绍制作复杂交换图像的方法,相信能够对
- 这个类主要解决在类型转换时,如果直接使用类型转换函数,会因为变量为空或者格式不对而导致程序报错,而这种报错在大多数情况下是允许的.例如要转换
- 实际工作经历中,免不了有时候需要连接数据库进行问题排查分析的场景,之前一直习惯通过 mysql -uxxx -hxxxx -P1234 ..
- 打过了趟深圳回来后,已经快半个月,在广州购书中心逛了下,发现2本前端书《重构HTML-改善WEB应用的设计》、《CSS3 实战》,看了一半《
- 由于一些读者对于960 Grid System CSS Framework的原理和使用方法比较感兴趣,暴风彬彬今天将和大家一同分享这篇关于9
- 本文介绍了可以帮助简化 PHP 开发的10个项目,包括框架,类库,工具,代码。1.CakePHP Development Framework
- 首先安装WSH,NT(SERVER、WORKSTATION)、W2K服务器上需要安装WSH2.0或者更高版本。然后,参照下列代码即可:<
- IEBlog公布了开发中的Internet Explorer 8 Beta2版本的最新功能.IE8 Beta2在第一个版本的基础上做出了很大
- [前言] 我们经常会遇到多重查询问题,而长长的SQL语句往往让人丈二和尚摸不着头脑。特别是客户端部分填入
- 近日大家热议的盗版XP黑屏问题想必很多人都知道了,在这里就不多说。据媒体报道,微软公司将实施逐步投放策略,预计本周将投放5%黑屏,下周投放2
- 在使用Tensorflow的过程中,我们经常遇到数组形状不同的情况,但有时候发现二者还能进行加减乘除的运算,在这背后,其实是Tensorfl
- php实现记住密码自动登录方法不止一个,下面出现有二个emptyempty,其实是一个,那是因为代码高亮有bug。希望对大家有帮助。 一,用