Python 列表元素漏删问题和解决方法

在循环体中对列表元素进行判断,把符合或者不符合某个条件的元素删掉,这时会存在漏删的可能。举例如下:

把列表中含有“an” 的元素删除

list = ['Wang','Zhang','Li','ling','Du','Jane','Fan','Jack']
for each in list:
    if "an" in each:
        list.remove(each)

print(list)

运行的结果是:

['Zhang', 'Li', 'ling', 'Du', 'Fan', 'Jack']

可以看到“Zhang” 和 “Fan” 都符合条件,但是都没有被删掉,说明被漏删了。原因在于第一个元素“Wang” 符合条件,被删掉了以后,列表动态变化,“Zhang”变成了现在第一个元素,"Li"是变成了现在第二个元素,但是现在的for 循环的index变成了索引第二个,开始处理“Li”,就这样把“Zhang”漏掉了。

为了避免这个问题,解决方案有两种。

第一种:

用变量 i 索引,但是要注意从后往前,从前往后的话还是会有上面的问题。

list = ['Wang','Zhang','Li','ling','Du','Jane','Fan','Jack']
for i in range(len(list)-1, -1, -1): # 这里注意从后往前遍历
    if "an" in list[i]:
        list.remove(list[i])

print(list)

第二种:

重新开一个列表,保存需要删掉的元素,然后在原始列表中依次找到删除

list = ['Wang','Zhang','Li','ling','Du','Jane','Fan','Jack']
list_tmp = []
for each in list:
    if 'an' in each:
        list_tmp.append(each)
for each in list_tmp:
    list.remove(each)
print(list)

上面两种的运行结果都是:

['Li', 'ling', 'Du', 'Jack']

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值