[Python-ideas] iterator length

MRAB python at mrabarnett.plus.com
Mon Aug 9 22:22:51 CEST 2010


Paul Moore wrote:
> On 9 August 2010 18:16, Alexandru Moșoi <brtzsnr at gmail.com> wrote:
>> 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)
> 
> You say that this solution "is slow" and then you propose it? I'm confused.
> 
That's just to describe its behaviour. An actual implementation wouldn't
necessarily do it that way.

> Besides which, as you define it, it exhausts the iterator, which makes
> it useless. It may be useful for an *iterable*, but most of them
> support len in any case.
> 
>> 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.
> 
> Precisely. So how is it useful?
> 
> If you could show some real code that uses your ilen function, that
> would help clarify. But it still won't explain why the function should
> be built in rather than just defined by your code where it's needed -
> you'll have to have some very common and compelling use cases to argue
> that.
> 
I agree.



More information about the Python-ideas mailing list