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 相关文章推荐
Pyramid Mako模板引入helper对象的步骤方法
Nov 27 Python
Python使用urllib模块的urlopen超时问题解决方法
Nov 08 Python
Python通过递归遍历出集合中所有元素的方法
Feb 25 Python
python实现八大排序算法(1)
Sep 14 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
Jul 30 Python
python构建基础的爬虫教学
Dec 23 Python
python三大神器之fabric使用教程
Jun 10 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
python 爬取学信网登录页面的例子
Aug 13 Python
Python json模块与jsonpath模块区别详解
Mar 05 Python
深入了解Python 方法之类方法 & 静态方法
Aug 17 Python
Pycharm操作Git及GitHub的步骤详解
Oct 27 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
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
2010/03/27 PHP
PHP中的Memcache详解
2014/04/05 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
一个实用的php验证码类
2017/07/06 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
JavaScript入门教程(1) 什么是JS
2009/01/31 Javascript
jquery 实现的全选和反选
2009/04/15 Javascript
关于捕获用户何时点击window.onbeforeunload的取消事件
2011/03/06 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
深入学习JavaScript对象
2015/10/13 Javascript
jQuery on()绑定动态元素出现的问题小结
2016/02/19 Javascript
jquery replace方法去空格
2017/05/08 jQuery
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
2018/09/14 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
HTML文本属性&颜色控制属性的实现
2019/12/17 HTML / CSS
澳大利亚宠物食品和药物在线:Jumbo Pets
2018/03/24 全球购物
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
青年志愿者事迹材料
2014/02/07 职场文书
创建市级文明单位实施方案
2014/03/01 职场文书
C++程序员求职信范文
2014/04/14 职场文书
民间借贷协议书范本
2014/10/01 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
2015年英语教师工作总结
2015/05/20 职场文书
2019年描写人生经典诗句大全
2019/07/08 职场文书
Python如何使用循环结构和分支结构
2022/04/13 Python
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android