[Python-ideas] iterator length
Nick Coghlan
ncoghlan at gmail.com
Tue Aug 10 04:37:32 CEST 2010
On Tue, Aug 10, 2010 at 7:42 AM, Ivan Pozdeev <vano at mail.mipt.ru> wrote:
>> 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):
>
> A generic iterator is something that inherently, by definition, has
> unknown and unpredictable length
> (think, for example, about berries you gather in a forest).
>
> There is no guarantee two tries give the same results,
> there isn't even a guarantee that it's finite.
Indeed - iterating over a completely arbitrary iterator with no exit
criteria is a recipe for infinite loops when someone passes in
something like itertools.count or itertools.repeat.
> You just can't, absolutely, by any means, know its length otherwise
> than by exhausting it. If you can, it's not a generic iterator but
> something else.
Yep, hence the existence of the __length_hint__ API as an internal
optimisation when dealing with iterators that do have some idea of
their length (see
http://mail.python.org/pipermail/python-dev/2009-April/088108.html for
discussion as to why it is undocumented).
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
More information about the Python-ideas
mailing list