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

我找不到python doc article 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)

该代码将在无限循环中运行,但如果我们将for w in words with换成word [:],则不会运行

参考方案

使用[:]可以在此时创建列表内容的副本,该副本为:

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

但是使用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
#...

Python:不允许使用重叠的键和值进行替换 - python

我试图将输入数据框中的值洗牌,将这些新值存储到字典中,然后通过将输入数据框值替换为其字典映射来获取输出数据框。但是,我收到“替换键和值不允许的替换”错误。这是我的代码示例:in_df = ['A','B','C'] in_df = pd.DataFrame(in_df,columns=['…

Python __getitem__和in运算符导致奇怪的行为 - python

是什么解释了以下行为:class Foo: def __getitem__(self, item): print("?") return 1 f = Foo() 1 in f # prints one ? and returns True 5 in f # prints ? forever until you raise a Keyboa…

在python中检查字典中键的正确方法 - python

Improve this question 所以一直想知道。假设d为字典...检查key是否在字典中的正确方法(更多pythonic):k in d or k in d.keys() 或者是其他东西?? 参考方案 一律使用k in d 这是O(1)恒定时间操作。替代k in d.keys()是Python 2中的O(N)线性时间操作,在Python 3中充其…

Pythonic迭代范围从1开始的方式 - python

当前,如果我要遍历1到n,则可能会使用以下方法:for _ in range(1, n+1): print(_) 有没有一种更干净的方法无需引用n + 1即可完成此操作?如果要迭代通常从1开始的范围(这并不罕见),这似乎很奇怪,我必须指定两次递增:在范围的开头加上1。在范围的末尾加上+ 1。 参考方案 range(1, n+1)不被认为是重复的,但是我可以看…

如何删除具有许多子文件夹的主文件夹中的所有文件? - python

我只想删除文件,而不是文件夹和子文件夹?试过这个,但我不想给出条件下的字符示例。for i in glob('path'+ '**/*',recursive = True): if '.' in i: os.remove(i) 我不喜欢这样,因为某些文件夹名称带有“。”在名字里。此外,那里还有许多类…