2016-12-27 36 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