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

confused about looping through lists in python

亲爱的 Whosebug, 我刚开始学习 python,在循环遍历列表时我有点困惑。我一直在用Python.org的官方python教程来学习。在此页面 https://docs.python.org/2/tutorial/controlflow.html 的第 4.2 节中,他们在最后一个示例中编写了以下代码:

for w in words[:]:
    if len(w) > 6:
        words.insert(0, w)

让我感到困惑的部分是 for w in words[:]: 也许我需要更好地阅读他们的描述,但我似乎无法弄清楚为什么 之前的代码有效,而这个无效:for w in words:。我想这让我感到困惑,因为当我在解释器中键入 words[:] 时,当我在解释器中键入 words 时,我得到相同的结果。如果您能对这个话题有所了解,我将不胜感激。

for 循环中,您将元素插入到 words 列表中。如果您直接迭代 words 列表,您插入的元素将影响迭代。通常,当修改您正在迭代的列表时,您可能会得到不正确的结果,可能会引发异常,或者您甚至可能会随着列表的增长而出现无限循环,直到 运行 内存不足。

在您的特定情况下,如果列表中有 w len(w) > 6,您将进入无限循环。假设您有列表 word = ['len(this) == 15']。在第一次迭代中,由于 len(w) > 6,它将在 words 的位置 0 处插入 w,因此将列表中的所有其他内容向前推。所以现在 words 等于 ['len(this) == 15', 'len(this) == 15']。现在 for 循环检查是否有下一个元素;肯定有,因为您刚刚在位置 0 插入了一个元素,所以 for 循环再次迭代。当然,w 包含与上次迭代相同的值,所以会发生同样的事情。无限,超越!