On 19/06/2008, Keith Troell <[EMAIL PROTECTED]> wrote:
> Let's say I have a list of lists l == [[1, 2, 3], [2, 3, 1], [3, 2, 1], [1,
> 3, 2]]
>
>  If I do a l.sort(), it sorts on the first element of each listed list:
>
>  >>> l.sort()
>  >>> l
>  [[1, 2, 3], [1, 3, 2], [2, 3, 1], [3, 2, 1]]
>
>
>  How can I sort on the second or third elements of the listed lists?

Use the key= option in sort, together with the operator module:

>>> l = [[1,2,3], [2,3,1], [3,2,1], [1,3,2]]
>>> import operator
>>> l.sort(key=operator.itemgetter(1))
>>> l
[[1, 2, 3], [3, 2, 1], [2, 3, 1], [1, 3, 2]]
>>> l.sort(key=operator.itemgetter(2))
>>> l
[[3, 2, 1], [2, 3, 1], [1, 3, 2], [1, 2, 3]]
>>>

operator.itemgetter(i) is basically equivalent to a function defined as follows:

def f(lst):
  return lst[i]

If you have an old version of python, this may not work.  As an
alternative, try googling for "decorate-sort-undecorate".

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

Reply via email to