微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么修改要迭代的序列不安全?

如何解决为什么修改要迭代的序列不安全?

无需太过技术:

如果您要遍历Python中的可变序列,并且在遍历序列时对其进行更改,则并非总是很清楚会发生什么。如果您在迭代序列时在序列中插入元素,那么现在可以合理地认为序列中的“下一个”元素是什么?如果删除一个对象怎么办?

因此,在更改时迭代可变的序列会导致未指定的行为。任何事情都可能发生,具体取决于列表的实现方式。:-)

解决方法

在循环中修改要迭代的序列是不安全的(这仅适用于可变序列类型,例如列表)。如果需要修改要遍历的列表(例如,复制选定的项目),则必须遍历一个副本。切片符号使这一点特别方便:

   >>> for x in a[:]: # make a slice copy of the entire list
   ...    if len(x) > 6: a.insert(0,x)
   ...
   >>> a
   ['defenestrate','cat','window','defenestrate']

为什么做起来不安全for x in a

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。