Training, Open Source computer languages
PerlPHPPythonMySQLApache / TomcatTclRubyJavaC and C++LinuxCSS 
Search for:
Home Accessibility Courses Diary The Mouth Forum Resources Site Map About Us Contact
Python - Sort Order

Posted by admin (Graham Ellis), 29 April 2004
1. If you run sort on a list without any parameters, it will be sorted into its "natural" order.  The natural sort order is defined by the __cmp__ method on the classe(s) of objec ts in the list.

2. If you run sort on a list and provide a method name as parameter, that method is used as the comparator.  It takes two incoming parameters, and return -1 0 or +1 to indicate which of the two incoming parameters has the higher sort value (or 0 if they have the same value as far as sort is concerned).

Here's an example.  Our postman has mail to deliver to a number of houses and (in British fashion) wants to go up one side of the street - the even numbers, then back through the odd numbers on the other side.

Code:
values = [1,2,5,12,14,16,10,19,35,38,41,22]
values.sort()
print values
def postman(one, two):
       if one%2 == 0 and two%2 != 0: return -1
       if one%2 != 0 and two%2 == 0: return 1
       if not one%2: return cmp(one, two)
       return cmp(two,one)

values.sort(postman)
print values


And the results:

[1, 2, 5, 10, 12, 14, 16, 19, 22, 35, 38, 41]
[2, 10, 12, 14, 16, 22, 38, 41, 35, 19, 5, 1]




This page is a thread posted to the opentalk forum at www.opentalk.org.uk and archived here for reference. To jump to the archive index please follow this link.

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2012: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 899360 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho