我碰巧发现了这段代码:“用for for in word :,该示例将尝试创建一个无限列表

May*_*wal 6 python list infinite python-3.x

我在python doc文章4.2中找不到有关for循环的代码说明。

它提到了类似的内容:如果我们不复制列表,那么它将为列表打印无限的列表值words = ['cat', 'window', 'defenestrate'];但如果我们事先使用复制它,则不会"for w in words[:]"。我需要对此进行解释。

words = ['cat', 'window', 'defenestrate']
for w in words :
    if len(w) > 6:
       words.insert(0,w)
Run Code Online (Sandbox Code Playgroud)

该代码将在无限循环中运行,但是如果我们将for w inword with中的w 交换为word [:]

ipa*_*eka 1

[:]此时创建列表内容的副本,这将是:

words = ['cat', 'window', 'defenestrate']  # equals words[:]

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

#0 cat
#1 window
#2 defenestrate
#len: 4
Run Code Online (Sandbox Code Playgroud)

但是使用words变量本身,步进循环不会执行任何操作,因为在第一个位置插入时,前进的步骤将被取消:

words = ['cat', 'window', 'defenestrate']

for i, w in enumerate(words):
    print(i, w)
    if len(w) > 6:
        words.insert(0,w)
        print("len:", len(words))

#0 cat
#1 window
#2 defenestrate
#len: 4
#3 defenestrate
#len: 5
#4 defenestrate
#len: 6
#5 defenestrate
#len: 7
#6 defenestrate
#len: 8
#7 defenestrate
#len: 9
#...
Run Code Online (Sandbox Code Playgroud)