2013-07-09 17 views

risposta

95
unsorted_list.sort(key=lambda x: x[3]) 
+42

Vale la pena notare che in questo metodo, gli interi sono confrontati lessicograficamente. Pertanto, ''5'' sarà maggiore di'' 20''. Se deve essere eseguito un confronto tra interi, deve essere utilizzato 'key = lambda x: int (x [3])' – inspectorG4dget

+10

Puoi anche usare 'key = itemgetter (3)' qui (da ['operator'] (http : //docs.python.org/3.3/library/operator.html#operator.itemgetter) modulo). Mentre alcune persone trovano 'itemgetter' e' attrgetter' meno leggibili di lambdas, altri li usano estesamente, quindi vale almeno la pena di leggerli e sapere cosa fanno. – abarnert

+0

questo è il motivo per cui adoro python <3 –

27

Usa sorted() con un key come segue -

>>> unsorted_list = [['a','b','c','5','d'],['e','f','g','3','h'],['i','j','k','4','m']] 
>>> sorted(unsorted_list, key = lambda x: int(x[3])) 
[['e', 'f', 'g', '3', 'h'], ['i', 'j', 'k', '4', 'm'], ['a', 'b', 'c', '5', 'd']] 

I lambda ritorna il quarto elemento di ciascuna delle liste interne e la funzione sorted utilizza per ordinare quelli lista. Ciò presuppone che int(elem) non fallirà per l'elenco.

Oppure utilizzare itemgetter (come il commento di Ashwini ha sottolineato, questo metodo non funzionerebbe se si dispone di rappresentazioni di stringa di numeri, dal momento che sono destinati a fallire in qualche luogo per i numeri 2+ cifre)

>>> from operator import itemgetter 
>>> sorted(unsorted_list, key = itemgetter(3)) 
[['e', 'f', 'g', '3', 'h'], ['i', 'j', 'k', '4', 'm'], ['a', 'b', 'c', '5', 'd']] 
+1

'itemgetter' non funzionerà se la lista contiene:' [['a', 'b', 'c', '100', 'd'], ['e', 'f', 'g', ' 2 ',' h '], [' i ',' j ',' k ',' 4 ',' m ']] ' –

+0

Vero. Forse dovrei semplicemente rimuoverlo, il 'lambda' fa il trucco qui. –

+0

Sì, 'itemgetter (3)' sostituisce solo 'lambda x: x [3]', non 'lambda x: int (x [3])'. (Potresti 'compose (int, itemgetter (3))', ma solo se sei pazzo, o veramente determinato a scrivere codice Haskell o Lisp in Python ...) – abarnert

Problemi correlati