python - 为什么这是一个无限循环?

标签 python list loops infinite-loop

我刚刚浏览了 Python 文档教程的循环技术章节,我有一个关于这个男孩的问题:[:]

我了解到它需要一个字符串的开始和结束索引,所以:

text = "This is text"
text[:] # will return the whole text "This is text" and
tex[:4] # will return "This".

但是当我在这里看到这段代码时...

words = ['cat', 'dog', 'cowcowcow']
for w in words[:]:  # Loop over a slice copy of the entire list.
    if len(w) > 6:
        words.insert(0, w)
print words

输出:

['cowcowcow', 'cat', 'dog', 'cowcowcow']

...没看懂for循环中[:]的意思。我只想写

for w in words:

但是当我这样做时,这是一个无休止的 while 循环,为什么?

最佳答案

[:] 表示从列表开始到开头的范围 - 它本质上是复制列表(我通常提倡使用 list(...) 代替为了可读性,它做同样的工作,并且适用于所有可迭代对象,而不仅仅是序列)。

这里的问题是您在循环时修改列表,这意味着有更多的条目要循环,所以它变成无限的。

一般来说,在遍历列表的同时修改列表是一个的主意。相反,请考虑 list comprehension构建一个新列表。

此代码将所有长度超过 6 的单词以相反的顺序放在列表的开头。因此,另一种实现方式是:

words = [w for w in reversed(words) if len(w) > 6] + words

关于python - 为什么这是一个无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16153039/

相关文章:

python - 如何更改 False 列表中的所有 True 值,反之亦然

string - Makefile,修改列表

loops - 如何为循环中的每 500 个元素递增循环中的变量?

python - 我应该如何在 Telegram python 机器人中使用 parse_mode ='HTML' ?

python - celery 过期 - 引发异常

python - Python 中自定义错误处理程序的正确命名范围

循环中的 VBA 复制和粘贴

python - 编写代码对多个 pandas DataFrame 执行相同的操作

java - 如何从列表中删除弱引用?

c - 读取文件并通过不循环的套接字连接发送