初学者在python遍历序列同时删除相邻元素时的易错点

(1)问题的案例

以列表List为例

现在有一个列表,我想要遍历它,然后判断每个元素是否满足某个条件而需要被删除,如下面一段代码:

test = [11,22,33,44,55,66]

for temp in test:
    if temp == 22 or temp == 33:
        test.remove(temp)

我们理想的执行结果是:

[11,44,55,66]

但是实际执行结果却是:

[11,33,44,55,66]

(2)问题出现的原因

33没有被删除掉!这是因为 当 for 的光标 移动到22时 发现22满足条件需要被删除,那么就把22删除了,这时后面的33发现22被删除后留下了空位置就自动补位移动到了原先22的位置,但是光标却忽视了,光标没有管这个位置,直接跳向下一个,也就是指向了44。

这就是33没有没删除的原因。

这是一个非常危险的bug,实际开发中,如果应该被删除但是却被漏掉的垃圾会不断累积直到造成内存溢出。

(3)可行的解决方案

我的解决方案是,在一次遍历时,不删除,而是将不应该删除的元素,保存到一个中间变量中。

test = [11,22,33,44,55,66]
dataBackup = [] 

for temp in test:
    if temp != 22 and temp != 33:
        dataBackup.append(temp)

test = dataBackup

  以上OK!

 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值