You can think of the "key" option like this: when sort comes to compare elements x and y it gives you the option of telling *what* you want to compare about x and y. You might, for example, want to sort a list of strings based on their *length* not on their alphabetical position. To do so, write a 1-argument function that returns the length of a string:

###
Python 2.4 (#1, Apr 4 2005, 13:57:19)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> l=['sea', 'd', 'bee']
>>> l.sort() #the normal sort
>>> l
['bee', 'd', 'sea']
>>> def strlen(x): # the 1-argument function
... return len(x)
...
>>> l.sort(key=strlen)
>>> l
['d', 'sea', 'bee'] #the length sort; it's stable so sea is still before bee
>>> def length_alph(x): #'key' function if you want length first and
then alphabetical
... return (len(x),x)
...
>>> l.sort(key=length_alph); l
['d', 'bee', 'sea']
###

Great. len is a function though. Why use a second layer of function when len is a function in itself?


l = ['d','sea','bee']
l.sort(key=len)
l
['d', 'bee', 'sea']


Jacob


_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to