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 初始化多维数组代码
Sep 06 Python
python端口扫描系统实现方法
Nov 19 Python
Python中尝试多线程编程的一个简明例子
Apr 07 Python
python统计cpu利用率的方法
Jun 02 Python
python实现linux下使用xcopy的方法
Jun 28 Python
Python简单实现TCP包发送十六进制数据的方法
Apr 16 Python
用tensorflow构建线性回归模型的示例代码
Mar 05 Python
在Python中实现shuffle给列表洗牌
Nov 08 Python
Python Cookie 读取和保存方法
Dec 28 Python
python GUI图形化编程wxpython的使用
Jul 19 Python
Python3实现zip分卷压缩过程解析
Oct 09 Python
Python图像处理库PIL详细使用说明
Apr 06 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
B2K与车机的中波PK
2021/03/02 无线电
PHP 读取和修改大文件的某行内容的代码
2009/10/30 PHP
php 判断服务器操作系统的类型
2014/02/17 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
简单实现php上传文件功能
2017/09/21 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
动态获取复选框checkbox选中个数的jquery代码
2013/06/25 Javascript
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
JS 拦截全局ajax请求实例解析
2016/11/29 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
2016/12/26 Javascript
jquery插件ContextMenu设置右键菜单
2017/03/13 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
JS猜数字游戏实例讲解
2020/06/30 Javascript
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
Python操作SQLite简明教程
2014/07/10 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
Django 实现对已存在的model进行更改
2020/03/28 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
Python关于拓扑排序知识点讲解
2021/01/04 Python
python绘图模块之利用turtle画图
2021/02/12 Python
结合CSS3的布局新特征谈谈常见布局方法
2016/01/22 HTML / CSS
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
酒店保洁主管岗位职责
2013/11/28 职场文书
高三毕业生自我鉴定
2013/12/20 职场文书
《在山的那边》教学反思
2014/02/23 职场文书
三分钟演讲稿事例
2014/03/03 职场文书
日语专业毕业生自荐书
2014/06/18 职场文书
无故旷工检讨书
2015/08/15 职场文书
Python实现简单的俄罗斯方块游戏
2021/09/25 Python