2013-07-09 15 views

Odpowiedz

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

Warto zauważyć, że w tej metodzie liczby całkowite są porównywane leksykograficznie. Zatem "5" będzie większe niż "20". Jeśli ma zostać wykonane porównanie całkowite, należy użyć 'key = lambda x: int (x [3])' – inspectorG4dget

+10

Możesz również użyć 'key = itemgetter (3)' tutaj (z ['operator'] (http : //docs.python.org/3.3/library/operator.html#operator.itemgetter) moduł). Chociaż niektóre osoby uważają, że 'itemgetter' i' attrgetter' są mniej czytelne niż lambdy, inne używają ich w znacznym stopniu, więc warto przynajmniej móc je przeczytać i wiedzieć, co robią. – abarnert

+0

to jest powód, dla którego kocham pytona <3 –

27

Zastosowanie sorted() z key następująco -

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

W lambda wraca czwarty element każdego z wewnętrznych listach i funkcja sorted używa tego uporządkować te listy. Zakłada się, że int(elem) nie zakończy się niepowodzeniem na liście.

Albo użyć itemgetter (Jako komentarz Ashwini zwrócił uwagę, metoda ta nie będzie działać, jeśli masz reprezentacji ciągów z liczb, ponieważ są one skazane na niepowodzenie gdzieś numerów 2+ cyfr)

>>> 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' nie zadziała, jeśli lista zawiera:' [[a ',' b ',' c ',' 100 ',' d '], [' e ',' f ',' g ',' 2 ',' h '], [' i ',' j ',' k ',' 4 ',' m ']] ' –

+0

Prawda. Może powinienem go po prostu usunąć, "lambda" robi tu sztuczkę. –

+0

Tak, 'itemgetter (3)' zastępuje tylko 'lambda x: x [3]', a nie 'lambda x: int (x [3])'. (Możesz "skomponować (int, itemgetter (3))", ale tylko wtedy, gdy jesteś szalony lub naprawdę zdeterminowany do napisania kodu Haskella lub Lispa w Pythonie ...) – abarnert

Powiązane problemy