【发布时间】:2016-03-18 21:45:57
【问题描述】:
下面的代码产生了一些非常奇怪的结果
import re
string = "test test test"
positions = re.finditer("test", string)
print (list(positions))
print (list(positions))
输出:
[<Match object...>, <Match object...>, <Match object...>]
[]
现在,我想我知道这里发生了什么。第一个 list 调用“耗尽”迭代器(所以它“使用迭代器”,就像在生成器中一样,在从迭代器创建列表的过程中)所以当第二次调用 list 时,迭代器消失了,我们得到一个空列表。下面的段落似乎证实了这一点,尽管我试图理解他们在这里所说的一些事情,所以我对这个解释并不完全满意(如果它是正确的):
一个容器对象(比如一个列表)产生一个新的迭代器 每次将它传递给 iter() 函数或在 for 循环中使用它。 用迭代器尝试这个只会返回同样的疲惫 在上一次迭代过程中使用的迭代器对象,使其出现 像一个空容器。
以上段落来自the official documentation。
我不太明白他们在上一段第一句话中所说的内容,尤其是关于传递给iter() 函数的内容,而且我不知道他们如何将 for 循环中的用法与生成的列表联系起来一个全新的迭代器。不过,第二句话似乎更接近我最初认为的上面代码中的内容。
如果有人能帮我解决这里的困惑,我将不胜感激。
注意:
我正在使用 Python 3.5.1
【问题讨论】: