Funkce seřazené () vrátí seřazený seznam z položek v iterovatelné.
sorted()
Funkce třídí prvky dané iterable v určitém pořadí (a to buď vzestupně nebo sestupně ) a vrátí řazeny iterable jako seznam.
Syntaxe sorted()
funkce je:
seřazeno (iterovatelné, klíč = žádné, reverzní = nepravdivé)
Parametry funkce seřazené ()
sorted()
může trvat maximálně tři parametry:
- iterovatelný - posloupnost (řetězec, n-tice, seznam) nebo kolekce (sada, slovník, zmrazená sada) nebo jakýkoli jiný iterátor.
- reverzní (volitelně) - Pokud
True
je seřazený seznam obrácen (nebo seřazen sestupně). Výchozí nastavení,False
pokud není k dispozici. - key (Volitelné) - Funkce, která slouží jako klíč pro porovnání řazení. Výchozí nastavení pro
None
.
Příklad 1: Řazení řetězce, seznamu a řazené kolekce členů
# vowels list py_list = ('e', 'a', 'u', 'o', 'i') print(sorted(py_list)) # string py_string = 'Python' print(sorted(py_string)) # vowels tuple py_tuple = ('e', 'a', 'u', 'o', 'i') print(sorted(py_tuple))
Výstup
('a', 'e', 'i', 'o', 'u') ('P', 'h', 'n', 'o', 't', 'y') ('a' , 'e', 'i', 'o', 'u')
Všimněte si, že ve všech případech je vrácen seřazený seznam.
Poznámka: Seznam má také metodu sort (), která funguje stejným způsobem jako sorted()
. Jediným rozdílem je, že sort()
metoda nevrací žádnou hodnotu a změní původní seznam.
Příklad 2: Seřadit sestupně
sorted()
Funkce přijímá reverse
parametr jako volitelného argumentu.
Nastavení reverse = True
seřadí iterovatelnou sestupně.
# set py_set = ('e', 'a', 'u', 'o', 'i') print(sorted(py_set, reverse=True)) # dictionary py_dict = ('e': 1, 'a': 2, 'u': 3, 'o': 4, 'i': 5) print(sorted(py_dict, reverse=True)) # frozen set frozen_set = frozenset(('e', 'a', 'u', 'o', 'i')) print(sorted(frozen_set, reverse=True))
Výstup
('u', 'o', 'i', 'e', 'a') ('u', 'o', 'i', 'e', 'a') ('u', 'o' , 'i', 'e', 'a')
klíčový parametr ve funkci Python seřazeno ()
Pokud chcete vlastní implementaci pro třídění, sorted()
přijímá také key
funkci jako volitelný parametr.
Na základě vrácené hodnoty klíčové funkce můžete setřídit danou iterovatelnost.
tříděno (iterovatelné, klíč = len)
Zde len()
je zabudovaná funkce Pythonu pro počítání délky objektu.
Seznam je seřazen podle délky prvku od nejnižšího počtu po nejvyšší.
Příklad 3: Řazení seznamu pomocí seřazeného () s klíčovou funkcí
# take the second element for sort def take_second(elem): return elem(1) # random list random = ((2, 2), (3, 4), (4, 1), (1, 3)) # sort list with key sorted_list = sorted(random, key=take_second) # print list print('Sorted list:', sorted_list)
Výstup
Řazený seznam: ((4, 1), (2, 2), (1, 3), (3, 4))
Příklad 4: Řazení pomocí více kláves
Předpokládejme, že máme následující seznam:
# Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100, Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) )
Chceme seřadit seznam tak, aby student s nejvyššími známkami byl na začátku. V případě, že mají studenti stejné známky, je třeba je seřadit, aby byl mladší účastník na prvním místě.
Můžeme dosáhnout tohoto typu třídění pomocí více klíčů tím, že místo čísla vrátíme n-tici.
Dvě n-tice lze porovnat porovnáním jejich prvků počínaje od prvního. Pokud existuje remíza (prvky jsou stejné), porovnává se druhý prvek atd.
>>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True
Použijme tuto logiku k vytvoření logiky třídění.
# Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100 , Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) ) def sorter(item): # Since highest marks first, least error = most marks error = 100 - item(1) age = item(2) return (error, age) sorted_list = sorted(participant_list, key=sorter) print(sorted_list)
Výstup
((('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )
Vzhledem k tomu, že logická funkce třídění je malá a vejde se do jednoho řádku, lambda
funkce se používá uvnitř, key
místo aby předávala samostatný název funkce.
Výše uvedený program lze zapsat pomocí lambda
funkce následujícím způsobem:
# Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100 , Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) ) sorted_list = sorted(participant_list, key=lambda item: (100-item(1), item(2))) print(sorted_list)
Výstup
((('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )
Další informace o funkcích lambda najdete na stránkách Python Lambda Functions.