__cmp__ method

Jon Clements joncle at googlemail.com
Thu Jun 15 01:23:59 CEST 2006

This probably isn't exactly what you want, but, unless you wanted to do
something especially with your own string class, I would just pass a
function to the sorted algorithm.


sorted( [a,b,c], cmp=lambda a,b: cmp(len(a),len(b)) )

gives you the below in the right order...

Never tried doing what you're doing, but something about builtin types,
and there's a UserString module...

Hope that helps a bit anyway,


JH wrote:

> Hi
> Can anyone explain to me why the following codes do not work? I want to
> try out using __cmp__ method to change the sorting order. I subclass
> the str and override the __cmp__ method so the strings can be sorted by
> the lengh. I expect the shortest string should be in the front. Thanks
> >>> class myStr(str):
>     def __init__(self, s):
>         str.__init__(self, s) # Ensure super class is initialized
>     def __cmp__(self, other):
>         return cmp(len(self), len(other))
> >>> a = myStr('abc')
> >>> b = myStr('Personal')
> >>> c = myStr('Personal firewall')
> >>> sorted([c, b, a])
> ['Personal', 'Personal firewall', 'abc']
> >>>

More information about the Python-list mailing list