A bit weird dictionary behavior
Steven D'Aprano
steve at REMOVE-THIS-cybersource.com.au
Mon Sep 22 19:23:54 EDT 2008
On Mon, 22 Sep 2008 07:35:50 -0700, bearophileHUGS wrote:
> Tino Wildenhain:
>
>> Wouldn't
>> len([x for x in iterable if x==y])
>> or even shorter:
>> iterable.count(y)
>> not work and read better anyway?
>
> The first version creates an actual list just to take its length, think
> about how much memory it may use.
For many iterables, the amount of memory is not excessive and the
increase in readability of len() is to be preferred over the side-effect
of sum(1 for...).
But sure, in general you shouldn't try to count the number of items in an
arbitrary iterable unless you know how much time and resources it will
end up using. That's why I don't think len() should support arbitrary
iterables.
>> even calculating with boolean values isn't neccessary since 'and' and
>> 'foo if bar else blub' are working much better so the type coalescing
>> bool - int - float can really go away.
>
> I don't understand.
I think Tino means that you don't need to cast items to bool since you
can use ints, floats etc. directly as truth values.
--
Steven
More information about the Python-list
mailing list