【发布时间】:2017-11-21 20:39:38
【问题描述】:
此代码来自 Python 的文档。我有点困惑。
words = ['cat', 'window', 'defenestrate']
for w in words[:]:
if len(w) > 6:
words.insert(0, w)
print(words)
以下是我最初的想法:
words = ['cat', 'window', 'defenestrate']
for w in words:
if len(w) > 6:
words.insert(0, w)
print(words)
为什么这段代码创建了一个无限循环而第一个没有?
【问题讨论】:
-
因为,您在每次迭代时都在
words列表中插入一个元素 -)) -
第一个是最初的
words而不是words本身的副本 -
首先,您在开始向其中添加内容之前遍历
words的副本。在第二个中,您尝试循环遍历words并同时使words更长,因此您永远不会到达终点。 -
该示例遍历数组的副本,而您的示例遍历列表本身。制作副本时,不会插入新单词,因此它只会遍历 3 个值。
-
你总是可以在那里添加更好的答案@cᴏʟᴅsᴘᴇᴇᴅ。 FWIW,那里的简短回答确实解释了这里问题背后的原因。
标签: python list for-loop iteration