Metoda sort () třídí prvky daného seznamu v konkrétním vzestupném nebo sestupném pořadí.
Syntaxe sort()
metody je:
list.sort (klíč =…, vzad =…)
Alternativně můžete ke stejnému účelu použít také vestavěnou funkci seřazené () Pythonu.
seřazeno (seznam, klíč =…, vzad =…)
Poznámka: Nejjednodušší rozdíl mezi sort()
a sorted()
je: sort()
změní seznam přímo a nevrátí žádnou hodnotu, zatímco sorted()
nezmění seznam a vrátí seřazený seznam.
Parametry sort ()
Ve výchozím nastavení sort()
nevyžaduje žádné další parametry. Má však dva volitelné parametry:
- reverzní - Pokud
True
je seřazený seznam obrácen (nebo seřazen sestupně) - klíč - funkce, která slouží jako klíč pro porovnání řazení
Vrátit hodnotu z sort ()
sort()
Metoda nevrací žádnou hodnotu. Spíše změní původní seznam.
Chcete-li, aby funkce místo seřazeného seznamu vrátila seřazený seznam, použijte sorted()
.
Příklad 1: Řazení daného seznamu
# vowels list vowels = ('e', 'a', 'u', 'o', 'i') # sort the vowels vowels.sort() # print vowels print('Sorted list:', vowels)
Výstup
Řazený seznam: ('a', 'e', 'i', 'o', 'u')
Řadit sestupně
sort()
Metoda přijímá reverse
parametr jako volitelného argumentu.
Nastavení reverse = True
seřadí seznam v sestupném pořadí.
list.sort(reverse=True)
Alternativně pro sorted()
můžete použít následující kód.
sorted(list, reverse=True)
Příklad 2: Seřadit seznam v sestupném pořadí
# vowels list vowels = ('e', 'a', 'u', 'o', 'i') # sort the vowels vowels.sort(reverse=True) # print vowels print('Sorted list (in Descending):', vowels)
Výstup
Řazený seznam (sestupně): ('u', 'o', 'i', 'e', 'a')
Řazení pomocí vlastní funkce pomocí klávesy
Pokud chcete vlastní implementaci pro třídění, sort()
metoda také přijímá key
funkci jako volitelný parametr.
Na základě výsledků klíčové funkce můžete daný seznam seřadit.
list.sort(key=len)
Alternativně pro tříděné:
sorted(list, key=len)
Zde len
je zabudovaná funkce Pythonu pro počítání délky prvku.
Seznam je seřazen podle délky každého prvku, od nejnižšího počtu po nejvyšší.
Víme, že n-tice je ve výchozím nastavení tříděna podle prvního parametru. Pojďme se podívat na to, jak přizpůsobit sort()
metodu řazení pomocí druhého prvku.
Příklad 3: Seřadit seznam pomocí klávesy
# take second element for sort def takeSecond(elem): return elem(1) # random list random = ((2, 2), (3, 4), (4, 1), (1, 3)) # sort list with key random.sort(key=takeSecond) # print list print('Sorted list:', random)
Výstup
Řazený seznam: ((4, 1), (2, 2), (1, 3), (3, 4))
Vezměme si další příklad. Předpokládejme, že máme seznam informací o zaměstnancích kanceláře, kde každý prvek je slovník.
Seznam můžeme seřadit následujícím způsobem:
# sorting using custom key employees = ( ('Name': 'Alan Turing', 'age': 25, 'salary': 10000), ('Name': 'Sharon Lin', 'age': 30, 'salary': 8000), ('Name': 'John Hopkins', 'age': 18, 'salary': 1000), ('Name': 'Mikhail Tal', 'age': 40, 'salary': 15000), ) # custom functions to get employee info def get_name(employee): return employee.get('Name') def get_age(employee): return employee.get('age') def get_salary(employee): return employee.get('salary') # sort by name (Ascending order) employees.sort(key=get_name) print(employees, end='') # sort by Age (Ascending order) employees.sort(key=get_age) print(employees, end='') # sort by salary (Descending order) employees.sort(key=get_salary, reverse=True) print(employees, end='')
Výstup
(('' Jméno ':' Alan Turing ',' věk ': 25,' plat ': 10 000), (' Jméno ':' John Hopkins ',' věk ': 18,' plat ': 1000), (' Jméno ':' Michail Tal ',' věk ': 40,' plat ': 15000), (' Jméno ':' Sharon Lin ',' věk ': 30,' plat ': 8000)) ((' Jméno ':' John Hopkins ',' věk ': 18,' plat ': 1000), (' Jméno ':' Alan Turing ',' věk ': 25,' plat ': 10 000), (' Jméno ':' Sharon Lin ', 'age': 30, 'plate': 8000), ('Name': 'Michail Tal', 'age': 40, 'plate': 15000)) (('Name': 'Michail Tal', 'age' : 40, 'plat': 15000), ('Jméno': 'Alan Turing', 'věk': 25, 'plat': 10 000), ('Jméno ':' Sharon Lin ',' věk ': 30,' plat ': 8000), (' Jméno ':' John Hopkins ',' věk ': 18,' plat ': 1000))
Tady v prvním případě vrátí naše vlastní funkce jméno každého zaměstnance. Jelikož se jedná o název string
, Python ho standardně třídí podle abecedního pořadí.
V druhém případě int
se vrátí age ( ) a seřadí se vzestupně.
Ve třetím případě funkce vrací plat ( int
) a je tříděna v sestupném pořadí pomocí reverse = True
.
Je dobré použít funkci lambda, když lze funkci shrnout do jednoho řádku. Výše uvedený program tedy můžeme napsat také jako:
# sorting using custom key employees = ( ('Name': 'Alan Turing', 'age': 25, 'salary': 10000), ('Name': 'Sharon Lin', 'age': 30, 'salary': 8000), ('Name': 'John Hopkins', 'age': 18, 'salary': 1000), ('Name': 'Mikhail Tal', 'age': 40, 'salary': 15000), ) # sort by name (Ascending order) employees.sort(key=lambda x: x.get('Name')) print(employees, end='') # sort by Age (Ascending order) employees.sort(key=lambda x: x.get('age')) print(employees, end='') # sort by salary (Descending order) employees.sort(key=lambda x: x.get('salary'), reverse=True) print(employees, end='')
Výstup
(('' Jméno ':' Alan Turing ',' věk ': 25,' plat ': 10 000), (' Jméno ':' John Hopkins ',' věk ': 18,' plat ': 1000), (' Jméno ':' Michail Tal ',' věk ': 40,' plat ': 15000), (' Jméno ':' Sharon Lin ',' věk ': 30,' plat ': 8000)) ((' Jméno ':' John Hopkins ',' věk ': 18,' plat ': 1000), (' Jméno ':' Alan Turing ',' věk ': 25,' plat ': 10 000), (' Jméno ':' Sharon Lin ', 'age': 30, 'plate': 8000), ('Name': 'Michail Tal', 'age': 40, 'plate': 15000)) (('Name': 'Michail Tal', 'age' : 40, 'plat': 15000), ('Jméno': 'Alan Turing', 'věk': 25, 'plat': 10 000), ('Jméno ':' Sharon Lin ',' věk ': 30,' plat ': 8000), (' Jméno ':' John Hopkins ',' věk ': 18,' plat ': 1000))
Další informace o funkcích lambda najdete na stránkách Python Lambda Functions.