[Python-ideas] iterator length

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


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
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.


Alexandru Moșoi

More information about the Python-ideas mailing list