python-可变迭代对象在for循环中的风险Risk in FOR loop while looping mutable iterable object...

>>> a = [1,2,3,4,5,6]
>>> for item in a:
...     a.remove(item)
...     
>>> a
[2, 4, 6]

   

  看到上面的代码是不是感觉很奇怪?直观来看,我们只是想依次把队列a中的每个元素依次删除,为什么最后的结果确是[2,4,6]?如果你够机智想必应该猜出来是什么原因了。对于每一次for循环,当前一次的a.remove(item)执行完成后,a相对的缩短了;item后面的元素补上了之前删除的位置,导致这次for循环删除的是下下个元素。可见,如果我们的迭代对象是会在循环体中发生变化的话,使用for语句将会带来不可预知的风险。

 

>>> a = [1,2,3,4,5,6]
>>> for item in a:
...     print('Index: ', a.index(item), ' Content:', item)
...     a.remove(item)
...     
Index:  0  Content: 1
Index:  1  Content: 3
Index:  2  Content: 5
>>> a
[2, 4, 6]

 

转载于:https://www.cnblogs.com/Blaxon/p/4729548.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值