Python实现列表索引批量删除的5种方法

 更新时间:2020年11月16日 11:07:56   作者:涛哥霸天下  
这篇文章主要介绍了Python实现列表索引批量删除的5种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

最近用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)

返回结果

在这里插入图片描述

这种结果,既不会报错,返回值也与目标极为相似,返回2个值list对象,len(listObj)-2 = 2,也是[3,… 开头,如果不仔细看好像没什么问题。但是结果却是错误的。

listObj.remove() 改为listObj.pop(index)结果也是相同的。

在这里插入图片描述

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连接Oracle的多种方式小结

    Python连接Oracle的多种方式小结

    Oracle数据库是一种强大的企业级关系数据库管理系统(RDBMS),而Python是一门流行的编程语言,两者的结合可以提供出色的数据管理和分析能力,本教程将详细介绍如何在Python中连接Oracle数据库,需要的朋友可以参考下
    2024-08-08
  • python使用wxpy实现微信消息防撤回脚本

    python使用wxpy实现微信消息防撤回脚本

    这篇文章主要为大家详细介绍了python使用wxpy实现微信消息防撤回脚本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • Python使用requirements.txt和pip打包批量安装的实现

    Python使用requirements.txt和pip打包批量安装的实现

    本文主要介绍了Python使用requirements.txt和pip打包批量安装的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • python实现的接收邮件功能示例【基于网易POP3服务器】

    python实现的接收邮件功能示例【基于网易POP3服务器】

    这篇文章主要介绍了python实现的接收邮件功能,结合实例形式分析了Python基于网易POP3服务器接收邮件相关操作技巧,需要的朋友可以参考下
    2019-09-09
  • Python实现批量修改指定目录下图片的大小

    Python实现批量修改指定目录下图片的大小

    批量修改指定目录下图片大小通常是在需要对大量图片进行统一处理的情况下使用的,本文主要为大家详细介绍了如何利用Python实现批量修改图片大小,需要的可以参考下
    2023-10-10
  • 使用python编写android截屏脚本双击运行即可

    使用python编写android截屏脚本双击运行即可

    使用python编写一个截屏的脚本,双击运行脚本就OK,截屏成功后会将截屏文件已当前时间命名,并保存在存放脚本的当前路径的screenshot文件夹下
    2014-07-07
  • python tkinter窗口最大化的实现

    python tkinter窗口最大化的实现

    这篇文章主要介绍了python tkinter窗口最大化的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python调用PC摄像头实现扫描二维码

    Python调用PC摄像头实现扫描二维码

    PC摄像机扫描二维码的应用场景很广泛,可以应用于各种需要快速扫描、识别和管理的场景,本文就来具体讲讲如何用Python实现这一功能吧
    2023-05-05
  • Python的反射函数与内省工具深入解析

    Python的反射函数与内省工具深入解析

    这篇文章主要为大家介绍了Python的反射函数与内省工具深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Python中列表和元组的使用方法和区别详解

    Python中列表和元组的使用方法和区别详解

    这篇文章主要介绍了Python中列表和元组的使用方法和区别详解的相关资料,需要的朋友可以参考下
    2016-07-07

最新评论