首页 > 学院 > 开发设计 > 正文

python-可变迭代对象在for循环中的风险RiskinFORloopwhileloopingmutableiterableobject

2019-11-14 17:04:48
字体:
来源:转载
供稿:网友
>>> 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: 1Index:  1  Content: 3Index:  2  Content: 5>>> a[2, 4, 6]

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表