Python: list(filter object) 清空对象

Python: list(filter object) empties the object

伙计们!

我正在使用 Python 3.6.1 并遇到了一个有趣的问题:
我正在使用一个简单的 itertools.filter() 从 items 列表中获取子列表,然后我只打印两次。

items = [1,2,3,4,5]
operateVersions = filter(lambda t: t, items)
print ("1: %s" % list(operateVersions))
print ("2: %s" % list(operateVersions))

结果很奇怪:

1: [1, 2, 3, 4, 5]
2: []

所以,当我 运行 list(operateVersions) 它以某种方式重写 operateVersions 过滤器对象而不是仅仅返回列表解释
这是一个好的行为吗?不是找我是

过滤器是一种特殊的可迭代对象,与生成器一样,您只能迭代一次。因此,当您第二次 运行 时,它基本上 returns 是一个空列表。