2010-10-23 3 views
1
`li = [(1106257, (255, 255, 255)), (1, (16, 16, 118)), (1, (32, 32, 128)), (1, (48, 48, 122)), (9, (249, 249, 249)), (1, (64, 64, 126)), (406, (247, 247, 251))]` 

Je veux trier li selon le premier numéro de chaque élément eg.1106257, 1, 1,1,9,1,406Python: Tri cette liste

Comment faire ce jeûne? Merci

Répondre

1

Ce que vous demandez est le comportement par défaut lors de la comparaison de tuples. Cependant, la réponse générique à votre question peut être:

>>> import operator 

>>> li = [(1106257, (255, 255, 255)), (1, (16, 16, 118)), (1, (32, 32, 128)), (1, (48, 48, 122)), (9, (249, 249, 249)), (1, (64, 64, 126)), (406, (247, 247, 251))] 
>>> li.sort(key=operator.itemgetter(0)) 
>>> li 
[(1, (16, 16, 118)), (1, (32, 32, 128)), (1, (48, 48, 122)), (1, (64, 64, 126)), 
(9, (249, 249, 249)), (406, (247, 247, 251)), (1106257, (255, 255, 255))] 

Si vous souhaitez trier en fonction des colonnes autres que la première (0), modifier ce nombre. Par exemple, si vous souhaitez trier en fonction des colonnes 2 puis 1, vous devez indiquer operator.itemgetter(2, 1) comme key.

2
>>> li = [(1106257, (255, 255, 255)), (1, (16, 16, 118)), (1, (32, 32, 128)), (1, (48, 48, 122)), (9, (249, 249, 249)), (1, (64, 64, 126)), (406, (247, 247, 251))] 
>>> li.sort() 
>>> li 
[(1, (16, 16, 118)), (1, (32, 32, 128)), (1, (48, 48, 122)), (1, (64, 64, 126)), (9, (249, 249, 249)), (406, (247, 247, 251)), (1106257, (255, 255, 255))] 

Comportement par défaut lorsque l'on compare tuples est de comparer d'abord le premier, puis le second, etc. Vous pouvez passer outre en donnant une fonction de comparaison personnalisée comme argument pour le genre().

+1

N'utilisez pas de fonctions de comparaison personnalisées. Ils sont lents et ne sont pas pris en charge dans Python 3. Utilisez plutôt les fonctions de touches. – adw