对循环遍历 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
包含与上次迭代相同的值,所以会发生同样的事情。无限,超越!
亲爱的 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
包含与上次迭代相同的值,所以会发生同样的事情。无限,超越!