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中条件选择和循环语句使用方法介绍
Mar 13 Python
详解appium+python 启动一个app步骤
Dec 20 Python
python机器学习理论与实战(五)支持向量机
Jan 19 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
Jan 05 Python
Python中函数的基本定义与调用及内置函数详解
May 13 Python
对DJango视图(views)和模版(templates)的使用详解
Jul 17 Python
python3.6生成器yield用法实例分析
Aug 23 Python
pytorch torch.expand和torch.repeat的区别详解
Nov 05 Python
Python : turtle色彩控制实例详解
Jan 19 Python
Pycharm和Idea支持的vim插件的方法
Feb 21 Python
Python turtle库的画笔控制说明
Jun 28 Python
python opencv肤色检测的实现示例
Dec 21 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
几种显示数据的方法的比较
2006/10/09 PHP
php微信公众平台开发之获取用户基本信息
2015/08/17 PHP
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
javascript调试说明
2010/06/07 Javascript
javascript常用对话框小集
2013/09/13 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
Bootstrap基本布局实现方法详解
2016/11/25 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
js禁止表单重复提交
2017/08/29 Javascript
[50:58]2018DOTA2亚洲邀请赛3月29日 小组赛A组OpTic VS Newbee
2018/03/30 DOTA
深入了解Python数据类型之列表
2016/06/24 Python
Django 导出 Excel 代码的实例详解
2017/08/11 Python
Python实现模拟分割大文件及多线程处理的方法
2017/10/10 Python
python 动态生成变量名以及动态获取变量的变量名方法
2019/01/20 Python
详解Python3中ceil()函数用法
2019/02/19 Python
django使用haystack调用Elasticsearch实现索引搜索
2019/07/24 Python
Django之PopUp的具体实现方法
2019/08/31 Python
奇怪的鱼:Weird Fish
2018/03/18 全球购物
个人简历自我评价
2014/01/06 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
房产授权委托书范本
2014/09/22 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
五年级下册复习计划
2015/01/19 职场文书
道歉的话怎么说
2015/05/12 职场文书
初中团支书竞选稿
2015/11/21 职场文书
500字作文之关于爸爸
2019/11/14 职场文书
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle