我刚刚浏览了 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/