2017-08-16 86 views
0

guys!Python:list(filter 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过滤对象,而不是仅仅返回列表解释
它是一个正常的行为吗?它不寻找我它是

+1

你使用'itertools.filter'吗?据我所知,它不存在于python3.x(至少,它不存在于我的机器上安装的python3.5上)。 – mgilson

+0

非常相关:https://stackoverflow.com/q/12319025/748858 - 具体来说,如果您想迭代迭代器多次,您需要将列表存储在'operateVersions'而不是迭代器中。 – mgilson

+0

@mgilson或者在这种情况下,每次直接将过滤器应用于“items”... –

回答

0

过滤器是一个特殊的可迭代对象,像一个生成器,你只能遍历它一次。所以基本上它会在你第二次运行时返回一个空列表。