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开发之str.format()用法实例分析
Feb 22 Python
Python端口扫描简单程序
Nov 10 Python
完美解决Python2操作中文名文件乱码的问题
Jan 04 Python
Python书单 不将就
Jul 11 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
Jul 13 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 Python
python中的colorlog库使用详解
Jul 05 Python
Flask框架中request、请求钩子、上下文用法分析
Jul 23 Python
解决python 上传图片限制格式问题
Oct 30 Python
Python小整数对象池和字符串intern实例解析
Mar 21 Python
Pandas中两个dataframe的交集和差集的示例代码
Dec 13 Python
Opencv中cv2.floodFill算法的使用
Jun 18 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
Windows 下的 PHP-PEAR 安装方法
2010/11/20 PHP
PHP重定向的3种方式
2013/03/07 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
2013/07/22 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
jQuery中prevUntil()方法用法实例
2015/01/08 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
2017/09/10 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
Python获取apk文件URL地址实例
2013/11/01 Python
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
详解使用python crontab设置linux定时任务
2016/12/08 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
pytorch 共享参数的示例
2019/08/17 Python
Python远程方法调用实现过程解析
2020/07/28 Python
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
建筑设计所实习生自我鉴定
2013/09/25 职场文书
暑期社会实践学生的自我评价
2014/01/09 职场文书
担保书怎么写
2014/04/01 职场文书
家长通知书教师评语
2014/04/17 职场文书
诚实守信演讲稿
2014/09/01 职场文书
个人政治思想总结
2015/03/05 职场文书
周恩来的四个昼夜观后感
2015/06/03 职场文书
幼儿园六一主持词
2015/06/30 职场文书
Python打包exe时各种异常处理方案总结
2021/05/18 Python
浅析MongoDB之安全认证
2021/06/26 MongoDB
详解非极大值抑制算法之Python实现
2021/06/28 Python
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL