Python实现列表索引批量删除的5种方法


Posted in Python onNovember 16, 2020

最近用Java做项目,使用到List broadcastInfos的 broadcastInfos.remove()方法,出现项目的重大失误,因为第一次使用Java语言,过于相信remove()方法,所以,不加思索的就使用了来删除list对象中的指定元素。

背景:
目标对象 listObj:[3, 4, 5, 6]
删除指定索引列表 indexList: [1, 2]
返回结果: [3, 6]
常见错误:

for listElement in listObj:
	for index in indexList:
		if listElement == listObj[index]:
			listObj.remove(listElement)

返回结果

Python实现列表索引批量删除的5种方法

这种结果,既不会报错,返回值也与目标极为相似,返回2个值list对象,len(listObj)-2 = 2,也是[3,… 开头,如果不仔细看好像没什么问题。但是结果却是错误的。

listObj.remove() 改为listObj.pop(index)结果也是相同的。

Python实现列表索引批量删除的5种方法

Java用同样的编程思想,得到的结果也有相似性。
这种错误,主要是初学者对于数据存储原理没有理解清楚,或者,没有意识到内存存储长度的动态变化导致的, 下面介绍几种Python删除指定列表索引的方法

a = [3, 4, 5, 6]
b = [1,2]  # b 中为 a的索引

# 删除a中下标为b中的元素
# ====> [3, 6]

# 方法一
a = [a[i] for i in range(len(a)) if (i not in b)]
print(a)  # 重新生成满足条件的list并赋值给 a 


# 方法二
[ a.remove(cElement) for cElement in [a[i] for i in b]]
print(a) # 强制使用 a.remove() 方法方式


# 方法三
a = {a[i] if i not in b else None for i in range(len(a))}
a.remove(None) # 将要删除的对象设置为默认值,
				#  前提是返回结果无序要求以及 纯一种类型
print(a)


# 方法四
m = {i:element for i, element in enumerate(a)}
[m.pop(i) for i in b]
print(list(m.values())) # 将每一个元素对象编码,然后按指定的索引删除,
						 # 并返回 values() 集合对象 --> list对象


# 方法五
class ListSub:

  def __init__(self, list1=None):
    if list1 is None:
      self.listA = []
    elif len(list1):
      self.listA = [x for x in list1]


  def __sub__(self, rhs):
    [self.listA.remove(cElement) for cElement in [self.listA[i] for i in rhs.listA]]
    return self.listA


a = ListSub(a)
b = ListSub(b)

print(a-b)  # 自己写个类,既然Python 不支持 “-” 这个符号,
			 # 而喜欢存储索引的同学,自己写个工具类,实现减法,
			 # 返回自己想要的结果对象。

当然,以上的方式都只是纯粹将方法的实现,没有进行算法优化,以及相应的异常捕获和处理,而Python的效率是有名的…, 所有大牛们请不要过多介怀。

方法其实还有很多,但就项目中出现的Java语法这种错误, 我就用Python 来反省一下自己,希望能帮到大家,谢谢。

最后,在学习其他语言的同时,才知道,Python有他语言的便捷之处,也有其他语言共有的缺憾,没有语言基础的使用者,坑尤其多(比如List类的使用),所以,还要广学习,多对比,写出集多种语言精华的代码,然更多初学者将精力放在业务处理和程序的实现上。

到此这篇关于Python实现列表索引批量删除的5种方法的文章就介绍到这了,更多相关Python 列表索引批量内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
跟老齐学Python之??碌某?? target=
Sep 12 Python
Python实现简单截取中文字符串的方法
Jun 15 Python
Python的collections模块中namedtuple结构使用示例
Jul 07 Python
Selenium元素的常用操作方法分析
Aug 10 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
Jun 27 Python
python定位xpath 节点位置的方法
Aug 27 Python
Python高级编程之继承问题详解(super与mro)
Nov 19 Python
python加载自定义词典实例
Dec 06 Python
对tensorflow中的strides参数使用详解
Jan 04 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
Mar 10 Python
python 最简单的实现适配器设计模式的示例
Jun 30 Python
pyqt5打包成exe可执行文件的方法
May 14 Python
Python 列表反转显示的四种方法
Nov 16 #Python
python 爬虫如何实现百度翻译
Nov 16 #Python
Python list和str互转的实现示例
Nov 16 #Python
python list的index()和find()的实现
Nov 16 #Python
Python识别处理照片中的条形码
Nov 16 #Python
Python将list元素转存为CSV文件的实现
Nov 16 #Python
python list等分并从等分的子集中随机选取一个数
Nov 16 #Python
You might like
目录,文件操作详谈―PHP
2006/11/25 PHP
PHP漏洞全解(详细介绍)
2012/11/13 PHP
解析如何在PHP下载文件名中解决乱码的问题
2013/06/20 PHP
Laravel下生成验证码的类
2017/11/15 PHP
犀利的js 函数集合
2009/06/11 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
浅析JavaScript中的事件机制
2015/06/04 Javascript
js实现继承的5种方式
2015/12/01 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
Python中tell()方法的使用详解
2015/05/24 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
2019/05/13 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
windows下python虚拟环境virtualenv安装和使用详解
2019/07/16 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
2019/10/17 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
is_file和file_exists效率比较
2021/03/14 PHP
StubHub智利:购买和出售您的门票
2016/11/23 全球购物
俄罗斯在线购买飞机票、火车票、巴士票网站:Tutu.ru
2020/03/16 全球购物
爱国演讲稿500字
2014/05/04 职场文书
中药学专业求职信
2014/05/31 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
用golang如何替换某个文件中的字符串
2021/04/25 Golang
详解非极大值抑制算法之Python实现
2021/06/28 Python
vue router 动态路由清除方式
2022/05/25 Vue.js