Funkcia seřazené () vráti zoradený zoznam z položiek v iterovateľnej podobe.
sorted()
Funkcia triedi prvky danej iterable v určitom poradí (a to buď vzostupne alebo zostupne ) a vráti radené iterable ako zoznam.
Syntax sorted()
funkcie je:
zoradené (iterovateľné, kláves = žiadne, reverzné = nepravdivé)
Parametre funkcie triedené ()
sorted()
môže mať maximálne tri parametre:
- iterovateľný - Sekvencia (reťazec, n-tica, zoznam) alebo kolekcia (množina, slovník, zmrazená množina) alebo akýkoľvek iný iterátor.
- obrátiť (voliteľné) - Ak
True
je zoradený zoznam obrátený (alebo zoradený zostupne). Predvolené hodnoty,False
ak nie sú poskytnuté. - kláves (voliteľné) - funkcia, ktorá slúži ako kláves na porovnanie zoradenia. Predvolené hodnoty pre
None
.
Príklad 1: Zoradenie reťazca, zoznamu a n-tice
# 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ýkon
(„a“, „e“, „i“, „o“, „u“) („P“, „h“, „n“, „o“, „t“, „y“) („a“ , 'e', 'i', 'o', 'u')
Všimnite si, že vo všetkých prípadoch sa vráti zoradený zoznam.
Poznámka: Zoznam má tiež metódu sort (), ktorá funguje rovnako ako sorted()
. Jediný rozdiel je v tom, že sort()
metóda nevráti žiadnu hodnotu a zmení pôvodný zoznam.
Príklad 2: Zoradiť zostupne
sorted()
Funkcia prijíma reverse
parameter ako voliteľného argumentu.
Nastavenie reverse = True
zoraďuje iteráciu v zostupnom poradí.
# 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ýkon
('u', 'o', 'i', 'e', 'a') ('u', 'o', 'i', 'e', 'a') ('u', 'o' , „i“, „e“, „a“)
kľúčový parameter vo funkcii Python triedené ()
Ak chcete vlastnú implementáciu na triedenie, sorted()
prijme tiež key
funkciu ako voliteľný parameter.
Na základe vrátenej hodnoty kľúčovej funkcie môžete danú iteráciu triediť.
zoradené (iterovateľné, kľúč = len)
Tu len()
je zabudovaná funkcia Pythonu na počítanie dĺžky objektu.
Zoznam je zoradený podľa dĺžky prvku od najnižšieho počtu po najvyššie.
Príklad 3: Zoradenie zoznamu pomocou seřazeného () s kľúčovou funkciou
# 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ýkon
Zoradený zoznam: ((4, 1), (2, 2), (1, 3), (3, 4))
Príklad 4: Zoradenie pomocou viacerých klávesov
Predpokladajme, že máme nasledujúci zoznam:
# 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) )
Zoznam chceme triediť tak, aby bol študent s najvyššími známkami na začiatku. V prípade, že majú študenti rovnaké známky, musia byť zoradení tak, aby bol mladší účastník na prvom mieste.
Tento typ triedenia môžeme dosiahnuť pomocou viacerých klávesov tak, že namiesto čísla vrátime n-ticu.
Dve n-tice je možné porovnať porovnaním ich prvkov počnúc prvou. Ak dôjde k rovnosti hlasov (prvky sú si rovné), porovná sa druhý prvok atď.
>>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True
Použime túto logiku na vytvorenie našej logiky triedenia.
# 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ýkon
((„„ Jimmy “, 90, 22), („ Terence “, 75, 12), („ David “, 75, 20), („ Alison “, 50, 18), („ John “, 45, 12) )
Pretože logická funkcia triedenia je malá a zmestí sa do jedného riadku, namiesto zadania samostatného názvu lambda
funkcie sa použije funkcia vo vnútri key
.
Vyššie uvedený program je možné zapísať pomocou lambda
funkcie nasledujúcim spôsobom:
# 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ýkon
((„„ Jimmy “, 90, 22), („ Terence “, 75, 12), („ David “, 75, 20), („ Alison “, 50, 18), („ John “, 45, 12) )
Ak sa chcete dozvedieť viac informácií o funkciách lambda, navštívte Python Lambda Functions.