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

本文主要介绍了Python实现列表索引批量删除的5种方法,

文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

最近用Java做项目,使用到List broadcastInfos的 broadcastInfos.remove()方法,出现项目的重大失误,因为第一次使用Java语言,过于相信remove()方法,所以,不加思索的就使用了来删除list对象中的指定元素。

背景:
目标对象 listObj:[3, 4, 5, 6]
删除指定索引列表 indexList: [1, 2]
返回结果: [3, 6]
常见错误:

1

2

3

4

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删除指定列表索引的方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

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种方法的文章就介绍到这了。

转自:https://www.weidianyuedu.com
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值