2016-12-27 60 views
1

一個可以考慮的功能通過迭代器計算產量的數量?

def f(iterator): 
    count = 0 
    for _ in iterator: 
     count += 1 
    return count 

def g(iterator): 
    return len(tuple(iterator)) 

相信他們可以不同的唯一途徑是g可能會耗盡內存,同時f沒有。
假設我是對有關:

是否有快速和/或以其他方式,更好的(大概,沒有成爲代碼高爾夫短) 的方式,同時使用更少的內存比tuple(iterator)佔用得到f(iterator) , 最好是內聯而不是一個函數?

(如果沒有爲fg一些其他的方式不同,那麼我相信 f是更有可能比g正確地定義,我以後的功能。 我已經看了the itertools documentation page,和看不到任何解決方案有)

回答

4

您可以使用sum與發電機表達的迭代器產生1爲每個項目:

>>> it = (i for i in range(4)) 
>>> sum(1 for _ in it) 
4