python 迭代时删除列表元素

本文深入探讨了Python中处理列表删除的常见错误及正确实践,对比了del、remove与pop方法的区别,解释了它们在迭代过程中的行为差异,并提供了解决方案。
错误的删除方式
  1. del var_name

    list_a = [1, 2, 3, 4]
    
    for index, item in enumerate(list_a):
        del item
    
    print(list_a) # [1, 2, 3, 4]
    

    del删除的只是变量,而不是数据,因此数组list_a内容不变

  2. remove & pop

    list_a = [1, 2, 3, 4]
    
    for index, item in enumerate(list_a):
        list_a.remove(item)
    
    print(list_a) # [2, 4]
    
    list_a = [1, 2, 3, 4]
    
    for index, item in enumerate(list_a):
        del_item = list_a.pop(index)
        print(del_item)
    
    print(list_a)
    '''
    output:
    1
    3
    [2, 4]
    '''
    

    a. remove会删除第一个匹配到的指定值, 而不是特定的索引, 如果找不到值则抛出 ValueError 异常
    b. pop 则会删除指定索引处的元素并返回它, 如果指定了无效的索引则抛出 IndexError 异常
    c. 为什么会输出[2, 4]?
    1. 列表迭代时按照索引进行的,当我们删除1时, 列表内容变成[2,3,4], 索引下标从 0 -> 1
    2. 第二次删除元素,就取下标为1的元素3, 索引下标变为2,列表内容[2,4]
    3. 第三次删除元素,取下标为2的元素,下标为2的元素已为空,因此无法删除

正确的删除方式
list_a = [1, 2, 3, 4]

for index, item in enumerate(list_a[:]):
    list_a.remove(item)

print(list_a) # []

list_a[:] python为切片列表创建了新对象, 迭代副本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值