2013-07-09 8 views

Antwort

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

Es ist erwähnenswert, dass bei dieser Methode die ganzen Zahlen lexikographisch verglichen werden. So wird "5" größer als 20 sein. Wenn ein ganzzahliger Vergleich durchgeführt werden soll, sollte 'key = Lambda x: int (x [3])' verwendet werden – inspectorG4dget

+10

Sie können auch 'key = itemgetter (3)' hier (aus dem ['operator'] (http : //docs.python.org/3.3/library/operator.html#operator.itemgetter) Modul). Während einige Leute "itemgetter" und "attrgetter" weniger lesbar als Lambdas finden, verwenden andere sie ausgiebig, so dass es zumindest wert ist, sie lesen zu können und zu wissen, was sie tun. – abarnert

+0

das ist der Grund, warum ich Python lieben <3 –

27

Verwenden sorted() mit einem key wie folgt -

>>> 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']] 

Die lambda kehrt das vierte Element von jedem der inneren und die Listen sorted Funktion verwendet, dass diejenigen, die Liste zu sortieren. Dies setzt voraus, dass int(elem) für die Liste nicht fehlschlägt.

Oder nutzen itemgetter (Wie Ashwini Kommentar darauf hingewiesen, diese Methode nicht funktionieren würde, wenn Sie Zeichenfolge Darstellungen der Zahlen haben, da sie gebunden sind, irgendwo für 2+ stellige Zahlen zum Scheitern verurteilt)

>>> 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' funktioniert nicht, wenn die Liste enthält: [['a', 'b', 'c', '100', 'd'], ['e', 'f', 'g', ' 2, h, i, j, k, 4, m]] –

+0

Wahr. Vielleicht sollte ich es einfach entfernen, das 'Lambda' macht hier den Trick. –

+0

Ja, 'itemgetter (3)' ersetzt nur das 'Lambda x: x [3]', nicht 'Lambda x: int (x [3])'. (Sie könnten 'komponieren (int, itemgetter (3))', aber nur, wenn Sie verrückt sind, oder wirklich entschlossen sind, in Python Haskell- oder Lisp-Code zu schreiben ...) – abarnert

Verwandte Themen