python 序列在 for 循环需要注意的点
复合语句是包含其它语句(语句组)的语句;它们会以某种方式影响或控制所包含其它语句的执行。 通常,复合语句会跨越多行,虽然在某些简单形式下整个复合语句也可能包含于一行之内。
if, while 和 for 语句用来实现传统的控制流程构造。
for 语句中执行 list 的 remove 操作时,会有一个很微妙的问题。如下:
【问题】
#示例1,会打印出 1 2 |
上述2个示例中,我们想要达到的预期效果是找出list a 中的重复元素。但是为什么示例1可以打印出2个重复元素,示例2只能打印出1个重复元素呢?
【分析】
Python 中 for 语句用于序列或其他可迭代对象中的元素进行迭代。
当序列在循环中被修改时会有一个微妙的问题(这只可能发生于可变序列例如列表中)。
会有一个内部计数器被用来跟踪下一个要使用的项,每次迭代都会使计数器递增,当计数器值达到序列长度时循环就会终止。
这意味着如果语句体从序列中删除了当前(或之前)的一项,下一项就会被跳过(因为其标号将变成已被处理的当前项的标号)。
类似地,如果语句体在序列当前项的前面插入一个新项,当前项会在循环的下一轮中再次被处理。
这会导致麻烦的程序错误,通常避免此问题的办法是对整个序列使用切片来创建一个临时副本
【参考解决】
# 对整个序列使用切片创建一个临时副本 |
###【参考】
Python文档
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 指尖改变世界!