[Python-ideas] iterator length

Alexandru Moșoi brtzsnr at gmail.com
Mon Aug 9 19:16:31 CEST 2010


Hello,

Sometimes it's useful to get the number of elements yield by an
iterator. For example (if ilen is the name of the function):

def pi(n):
 return ilen(for e in xrange(n) if isprime(e))

def count_pred(pred, iterator):
 return ilen(itertools.ifilter(pred, iterator))

A few solutions were discussed here
http://stackoverflow.com/questions/3393431/how-to-counting-not-0-elements-in-an-iterable
with the best two below:

1) sum(1 for e in iterator)
2) len(list(iterator))

First solution is slow, the second solution uses O(N) extra memory.

I propose the addition of a new function ilen() which is functionally
equivalent to:

def ilen(iterator):
 return sum(1 for e in iterator)

This function should be different from len() because it's time
complexity is O(N) (most people assume that len() takes O(1)) and it
consumes the iterator.

Regards,

-- 
Alexandru Moșoi
http://www.alexandru.mosoi.ro/



More information about the Python-ideas mailing list