使用for循环时列出扩展

时间:2014-11-13 17:08:42

标签: python list for-loop

我正在学习Python,在练习中,我遇到了这种情况:

words = ['one', 'two', 'three']
for w in words
    if len(w) == 5:
        words.insert(0,w)

现在,这里发生的事情是,当循环迭代最后一个单词并找到匹配时,它在列表的开头插入新单词并继续循环,因为列表的长度增加了1。这导致了一个无限循环。

现在,我改变了这样的代码:

words = ['one', 'two', 'three'] 
for w in words[:]
    if len(w) == 5:
        words.insert(0,w)

结果与我的预期完全一样。开头只有一个单词添加并退出循环。

有人可以解释第一个代码到底发生了什么吗?

1 个答案:

答案 0 :(得分:2)

您迭代了在循环中修改的列表。大多数情况下都不好。

您可能缺少的是words[:]创建了words的副本。你遍历副本,所以当你添加到原始列表时一切都很好。