我正在学习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)
结果与我的预期完全一样。开头只有一个单词添加并退出循环。
有人可以解释第一个代码到底发生了什么吗?
答案 0 :(得分:2)
您迭代了在循环中修改的列表。大多数情况下都不好。
您可能缺少的是words[:]
创建了words
的副本。你遍历副本,所以当你添加到原始列表时一切都很好。