python中通过index删除list中的多个元素

python中删除‘指定值的元素’可以直接通过remove()实现比较简单。
但是删除多个index对应的元素,却比较麻烦,如果缺少积累,可能需要花很多时间去思考。
 

0、问题引入

idx = [0, 1, 2]
a = ['a', 'b', 'c', 'd', 'e', 'f']
问题:删除idx中元素作为索引的a中的元素?
即,idx是a中需要删除的元素的索引 

一、错误方法1、

如果写为:
for i in idx:
    del a[i]
这样是错误的,因为随着a中的元素被删除,a中的index是发生了变化的

二、错误方法2、

如果写为
for idx0, elem in enumerate(a):
    if idx0 in idx:
        del a[idx0]
这样也是不可以的,因为随着a中的元素被删除,a中的index也是发生了变化的,
for那里的a一直在变化

错误方法2的实例展示:

例①:
b = [1, 2, 3]
for i, ele in enumerate(b):
    print('ppp', i, ele)
    if i == 0:
        del b[i]
    print(b)
返回:
ppp 0 1
[2, 3]
ppp 1 3
[2, 3]
例②:
b = [1, 2, 3]
num = 0
for i in b:
    num += 1
    del b[0]
    print(b, num) #最后一个元素被删除后,内存中没有b这个对象了,所以没有num==3
返回:
[2, 3] 1
[3] 2
例③:  
b = [1, 2, 3]
num = 0
for i, ele in enumerate(b):
    print('ppp', i, ele)
    num += 1
    del b[0]
    print(b, num)
返回:
ppp 0 1
[2, 3] 1
ppp 1 3
[3] 2

三、 唯一正确的方法:

把idx倒过来
for i in reversed(idx):
    del a[i]
这样就可以保证前面的元素的index不发生改变

 其实也可以通过sorted()把索引的大小顺序反过来。

补充:

del 语句能进行切片删除;且能删除变量。
clear,是毁灭性的删除;
remove,指定元素删除,只能删除第一个同名的元素。
pop ,指定索引删除,只能删除一个,且默认不写索引,有和append相反的功能。

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值