亲爱的StackOverFlow, 我刚开始学习python,在循环遍历列表时我有点困惑。我一直在使用Python.org的官方python教程来学习。在本页的第4.2节https://docs.python.org/2/tutorial/controlflow.html中,在最后一个示例中,他们编写了此代码:
for w in words[:]:
if len(w) > 6:
words.insert(0, w)
困扰我的部分是for w in words[:]:
也许我需要更好地阅读他们的描述,但我似乎无法弄清楚为什么
以前的代码有效,而且不会:for w in words:
。我想这让我感到困惑,因为当我在解释器中输入单词[:] 时,我在解释器中输入单词时会得到相同的结果。如果你能对这个话题有所了解,我将非常感激。
答案 0 :(得分:0)
在for
循环中,您将元素插入words
列表。如果直接遍历words
列表,则插入的元素将影响迭代。通常,在修改您正在迭代的列表时,可能会得到错误的结果,可能会引发异常,或者甚至可能在列表增长时出现无限循环,直到内存不足为止。
在您的特定情况下,如果列表中有w
len(w) > 6
,则您将获得无限循环。假设您有列表word = ['len(this) == 15']
。在第一次迭代中,从len(w) > 6
开始,它将在w
的位置0处插入words
,从而向前推送列表中的所有其他内容。所以现在words
等于['len(this) == 15', 'len(this) == 15']
。现在for
循环检查是否有下一个元素;保证是,因为你刚刚在位置0插入一个元素,所以for
循环再次迭代。当然,w
包含与上一次迭代中相同的值,因此会发生同样的事情。无限,超越!