2016-04-21 60 views
3

如果我有一個迭代it並欲竭其我可以這樣寫:如何高效地使用oneliner中的迭代器?

for x in it: 
    pass 

有一個內置或標準庫調用,讓我做在一個班輪?當然,我可以這樣做:

list(it) 

它將從迭代器構建一個列表,然後丟棄它。但我認爲這是因爲列表建設步驟效率低下。當然我自己寫一個幫助函數來做空循環,但我很好奇是否還有別的東西丟失。

+0

我不知道你想要什麼,但確實'[沒有爲了它]這份工作(或者這樣一個變體)? – Mathias711

+0

假設你沒有爲副作用做這些工作,那麼只需要拋棄迭代器就可以拋棄它,有什麼好處呢? – snakecharmerb

+0

純粹出於好奇 - 爲什麼? – nigel222

回答

8

itertools recipes

# feed the entire iterator into a zero-length deque 
    collections.deque(iterator, maxlen=0) 
+0

這裏還簡要解釋了這裏:http://code.activestate.com/lists/python-ideas/23364/ –

+0

謝謝 - 我曾試圖谷歌和stackoverflow搜索,沒有找到解決辦法。現在應該更容易發現:)而'collections.exhaust_iterator''或'itertools.exhaust_iterator''會更好,更明顯。 – hpk42

1

你可以使用sum

sum(0 for _ in it) 

或者類似地,使用reduce

reduce(lambda x, y: y, it)