On Thu, 2007-06-14 at 12:53 -0700, Ping wrote: > Hi, > > I'm wondering if it is useful to extend the count() method of a list > to accept a callable object? What it does should be quite intuitive: > count the number of items that the callable returns True or anything > logically equivalent (non-empty sequence, non-zero number, etc). > > This would return the same result as len(filter(a_callable, a_list)), > but without constructing an intermediate list which is thrown away > after len() is done. > > This would also be equivalent to > n = 0 > for i in a_list: > if a_callable(i): n += 1 > but with much shorter and easier-to-read code. It would also run > faster.
As an alternative to the generator-sum approach I posted in reply to Dustan's suggestion, you could (ab)use the fact that count() uses equality testing and do something like this: >>> class Oddness(object): ... def __eq__(self, other): return other%2==1 ... >>> [1,2,3,4,5].count(Oddness()) 3 I don't know which approach is faster. Feel free to compare the two. HTH, -- Carsten Haese http://informixdb.sourceforge.net -- http://mail.python.org/mailman/listinfo/python-list