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 相关文章推荐
使用PDB简单调试Python程序简明指南
Apr 25 Python
Python测试人员需要掌握的知识
Feb 08 Python
Python中pow()和math.pow()函数用法示例
Feb 11 Python
python实现一个简单的并查集的示例代码
Mar 19 Python
pytorch对可变长度序列的处理方法详解
Dec 08 Python
python selenium执行所有测试用例并生成报告的方法
Feb 13 Python
浅谈python的输入输出,注释,基本数据类型
Apr 02 Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
Dec 11 Python
Pytorch十九种损失函数的使用详解
Apr 29 Python
Python定义函数实现累计求和操作
May 03 Python
PyQt5 控件字体样式等设置的实现
May 13 Python
Python基本的内置数据类型及使用方法
Apr 13 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
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
php文件上传你必须知道的几点
2015/10/20 PHP
CI框架表单验证实例详解
2016/11/21 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
js对象关系图 方便dom操作
2012/03/18 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
js获取url中"?"后面的字串方法
2014/05/15 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
vue-cli项目使用mock数据的方法(借助express)
2019/04/15 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python脚本实时处理log文件的方法
2016/11/21 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
图文详解python安装Scrapy框架步骤
2019/05/20 Python
对numpy下的轴交换transpose和swapaxes的示例解读
2019/06/26 Python
django删除表重建的实现方法
2019/08/28 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
pandas中ix的使用详细讲解
2020/03/09 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
2020/09/21 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
酒店值班经理的工作职责范本
2014/02/18 职场文书
建筑安全标语
2014/06/07 职场文书
毕业证明模板
2015/06/19 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
Python机器学习之基础概述
2021/05/19 Python
Go语言基础函数基本用法及示例详解
2021/11/17 Golang
方法汇总:Python 安装第三方库常用
2022/04/26 Python