itertools.ilen?
Jeremy Fincher
fincher.* at osu.edu
Thu Aug 7 03:10:10 EDT 2003
Sometimes I find myself simply wanting the length of an iterator. For
example, to collect some (somewhat useless ;)) statistics about a program
of mine, I've got code like this:
objs = gc.get_objects()
classes = len([obj for obj in objs if inspect.isclass(obj)])
functions = len([obj for obj in objs if inspect.isroutine(obj)])
modules = len([obj for obj in objs if inspect.ismodule(obj)])
dicts = len([obj for obj in objs if type(obj) == types.DictType])
lists = len([obj for obj in objs if type(obj) == types.ListType])
tuples = len([obj for obj in objs if type(obj) == types.TupleType])
Now, obviously I can (and will, now that 2.3 is officially released :))
replace the list comprehensions with itertools.ifilter, but I need an
itertools.ilen to find the length of such iterators.
I can imagine such a need arises in more useful situations than this, but
this is the particular case that brought the need to mind.
The Python code is simple, obviously:
def ilen(iterator):
i = 0
for _ in iterator:
i += 1
return i
But it's a pity to use itertools' super-fast iterators and have to use slow,
raw Python to determine their length :)
Jeremy
More information about the Python-list
mailing list