对于在python中循环遍历列表感到困惑

时间:2015-08-14 00:35:30

标签: python list loops slice

亲爱的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:。我想这让我感到困惑,因为当我在解释器中输入单词[:] 时,我在解释器中输入单词时会得到相同的结果。如果你能对这个话题有所了解,我将非常感激。

1 个答案:

答案 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包含与上一次迭代中相同的值,因此会发生同样的事情。无限,超越!