classification
Title: iterator length
Type: enhancement Stage:
Components: Versions: Python 3.1, Python 3.2, Python 3.3, Python 2.7, Python 2.6, Python 2.5
process
Status: closed Resolution: rejected
Dependencies: Superseder:
Assigned To: Nosy List: Alexandru.Moșoi, benjamin.peterson, rhettinger
Priority: normal Keywords:

Created on 2010-08-09 16:15 by Alexandru.Moșoi, last changed 2010-08-09 18:04 by rhettinger. This issue is now closed.

Messages (3)
msg113421 - (view) Author: Alexandru Moșoi (Alexandru.Moșoi) Date: 2010-08-09 16:15
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))

Two notable solutions are discussed here http://stackoverflow.com/questions/3393431/how-to-counting-not-0-elements-in-an-iterable

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.
msg113422 - (view) Author: Benjamin Peterson (benjamin.peterson) * (Python committer) Date: 2010-08-09 16:19
Please post to python-ideas first.
msg113434 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2010-08-09 18:04
This has been rejected before.  The core issue is that it is not a very useful operation because it consumes the iterator.   

Also, this isn't an operation worth optimizing because most iterators that do something interesting are already slower than a genexp inside a sum().
History
Date User Action Args
2010-08-09 18:04:43rhettingersetnosy: + rhettinger
messages: + msg113434
2010-08-09 16:19:41benjamin.petersonsetstatus: open -> closed

nosy: + benjamin.peterson
messages: + msg113422

resolution: rejected
2010-08-09 16:15:59Alexandru.Moșoicreate