bjourne at gmail.com
Fri Jun 15 20:06:00 CEST 2007
On 6/15/07, Ping <ping.nsr.yeh at gmail.com> wrote:
> > sum(1 for i in a_list if a_callable(i))
> > --
> > Carsten Haesehttp://informixdb.sourceforge.net
> This works nicely but not very intuitive or readable to me.
> First of all, the generator expression makes sense only to
> trained eyes. Secondly, using sum(1 ...) to mean count()
> isn't very intuitive either.
> I would still prefer an expression like a_list.count(a_callable),
> which is short, clean, and easy to understand. :) However,
> it does produce ambiguities if a_list is a list of callables.
> Should the count() method match values or check return values
> of a_callable? There are several possible designs but I'm not
> sure which is better.
Maybe you could extend count() analogous to how sort() works:
# L is a list of Person objects, each Person has a name attribute
L.sort(key = attrgetter("name"))
# How many olle are there?
print L.count("olle", key = attrgetter("name"))
# And index could be extended in the same way!
# Whom has id 1234?
print L.index(1234, key = attrgetter("id")).name
All of these could be solved by giving Person an __eq__() method, but
it fails when you need to search, sort or count on a different key.
More information about the Python-list