2011-06-24 6 views
5

Imagínese que tengo una lista de tuplas en este formato:¿Cuál es la forma estándar de hacer este tipo en Python?

(1, 2, 3) 
(1, 0, 2) 
(3, 9 , 11) 
(0, 2, 8) 
(2, 3, 4) 
(2, 4, 5) 
(2, 7, 8) 
.... 

¿Cómo podría ordenar la lista por el primer elemento de las tuplas, y luego por el segundo? Me gustaría llegar a esta lista:

(0, 2, 8) 
(1, 0, 2) 
(1, 2, 3) 
(2, 3, 4) 
(2, 4, 5) 
(2, 7, 8) 
(3, 9 , 11) 

que estaba pensando hacer una especie para el primer elemento, y luego ir a través de la lista, y construir un hash con submatrices. Probablemente sobrecomplicaré las cosas :), y es por eso que pedí otras formas de hacer este tipo de cosas.

Respuesta

8

¿Por qué no simplemente deje que python clasifique la lista por usted?

my_list = [ 
(1, 2, 3), 
(1, 0, 2), 
(3, 9 , 11), 
(0, 2, 8), 
(2, 3, 4), 
(2, 4, 5), 
(2, 7, 8), 
] 

print sorted(my_list) 
>>>[(0, 2, 8), (1, 0, 2), (1, 2, 3), (2, 3, 4), (2, 4, 5), (2, 7, 8), (3, 9, 11)] 
3

Python hace automágicamente lo correcto:

>>> a = [(1, 2, 3), (1, 0, 2), (3, 9, 11), (0, 2, 8), (2, 3, 4), (2, 4, 5), (2, 7, 8)] 
>>> a.sort() 
>>> a 
[(0, 2, 8), (1, 0, 2), (1, 2, 3), (2, 3, 4), (2, 4, 5), (2, 7, 8), (3, 9, 11)] 
0

Si no te importa la clasificación por los tres elementos, esto es realmente trivial:

>>> l = [(1, 2, 3), (1, 0, 2), (3, 9, 11), (0, 2, 8), (2, 3, 4), (2, 4, 5), (2, 7, 8)] 
>>> l.sort() 
>>> l 
[(0, 2, 8), (1, 0, 2), (1, 2, 3), (2, 3, 4), (2, 4, 5), (2, 7, 8), (3, 9, 11)] 
1

Tuplas ya están ordenado de esa manera.

Prueba esto:

#!/usr/bin/python2 
l = [ 
    (1, 2, 3), 
    (1, 0, 2), 
    (3, 9 , 11), 
    (0, 2, 8), 
    (2, 3, 4), 
    (2, 4, 5), 
    (2, 7, 8), 
] 

l.sort() 
print l 
0
>>> x = [ 
... (1, 2, 3), 
... (1, 0, 2), 
... (3, 9 , 11), 
... (0, 2, 8), 
... (2, 3, 4), 
... (2, 4, 5), 
... (2, 7, 8), 
... ] 
>>> x.sort() 
>>> x 
[(0, 2, 8), (1, 0, 2), (1, 2, 3), (2, 3, 4), (2, 4, 5), (2, 7, 8), (3, 9, 11)] 
Cuestiones relacionadas