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

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

>>> 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]

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航