samwyse wrote: > On Jan 18, 3:06 am, Peter Otten <__pete...@web.de> wrote: >> samwyse wrote: >> > Lately, I've slinging around a lot of lists, and there are some simple >> > things I'd like to do that just aren't there. >> >> > s.count(x[, cmp[, key]]) >> > - return number of i‘s for which s[i] == x. 'cmp' specifies a custom >> > comparison function of two arguments, as in '.sort'. 'key' specifies >> > a custom key extraction function of one argument. >> >> What's your use case exactly? If I were to enhance count/index/rindex I >> would go for the simpler >> >> >>> missing = object() >> >>> class List(list): >> >> ... def count(self, value=missing, predicate=missing): >> ... if value is missing: >> ... if predicate is missing: >> ... raise TypeError >> ... return sum(1 for item in self if predicate(item)) >> ... else: >> ... if predicate is not missing: >> ... raise TypeError >> ... return list.count(self, value) >> ...>>> items = List(range(10)) >> >>> items.count(7) >> 1 >> >>> items.count(predicate=lambda item: item%3) >> >> 6 >> >> which nicely covers all applications I can imagine. >> >> Peter > > That is a good idea. However, I was looking more at the simplicity of > building of ideas that are already present in .sort. And this > implementation is pretty simple as well.
Note that the cmp() builtin and the cmp parameter for list.sort() are gone in Python 3. >>>> class List(list): > import __builtin__ > def count(self, value, cmp=__builtin__.cmp): > return sum(1 for item in self if not cmp(item, value)) > > >>>> items = List(range(10)) >>>> items.count(7) > 1 >>>> items.count(3, lambda a, b: not a%b) # My way > 6 >>>> items.count(Ellipsis, lambda a, b: not a%3) # Your way > 6 > > As a side note, wouldn't it be nice if '...' could be used in more > places than just slices? IMHO, a useful idiom would be to use it to > signify "irrelevant" or "don't care", as opposed to 'None' which (in > my mind, at least) signifies "missing" or "unknown". That is a pretty subtle distinction... I prefer keyword arguments, but in Python 3 you can use the ellipsis literal freely: >>> ... == ... True >>> [..., 42, ...].count(...) 2 Peter -- http://mail.python.org/mailman/listinfo/python-list