2017-08-16 50 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

過濾器是一個特殊的可迭代對象,像一個生成器,你只能遍歷它一次。所以基本上它會在你第二次運行時返回一個空列表。