Funkcija sorted () vrne razvrščeni seznam med elementi v iterabilu.
sorted()
Funkcija razvrsti elementi neka iterable v določenem vrstnem redu (bodisi rastoče ali Padajoče ) in vrne iterable razporejene v obliki seznama.
Sintaksa sorted()
funkcije je:
razvrščeno (iterable, key = None, reverse = False)
Parametri za funkcijo sorted ()
sorted()
lahko sprejme največ tri parametre:
- iterable - zaporedje (niz, nabor, seznam) ali zbirka (niz, slovar, zamrznjeni niz) ali kateri koli drug iterator.
- obratno (neobvezno) - Če
True
je razvrščen seznam obrnjen (ali razvrščen v padajočem vrstnem redu). Privzeto,False
če ni navedeno. - tipka (izbirno) - funkcija, ki služi kot ključ za primerjavo razvrščanja. Privzete vrednosti
None
.
Primer 1: Razvrsti niz, seznam in nabor
# 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))
Izhod
('a', 'e', 'i', 'o', 'u') ('P', 'h', 'n', 'o', 't', 'y') ('a' , 'e', 'i', 'o', 'u')
Upoštevajte, da se v vseh primerih vrne razvrščeni seznam.
Opomba: Seznam ima tudi metodo sort (), ki deluje enako kot sorted()
. Edina razlika je v tem, da sort()
metoda ne vrne nobene vrednosti in spremeni prvotni seznam.
Primer 2: Razvrsti v padajočem vrstnem redu
sorted()
Funkcija sprejme reverse
parameter kot izbirni argument.
Nastavitev reverse = True
razvrsti iterable v padajočem vrstnem redu.
# 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))
Izhod
('u', 'o', 'i', 'e', 'a') ('u', 'o', 'i', 'e', 'a') ('u', 'o' , 'i', 'e', 'a')
key Parameter v funkciji Python sorted ()
Če želite lastno izvedbo za razvrščanje, sorted()
sprejme key
funkcijo tudi kot izbirni parameter.
Na podlagi vrnjene vrednosti funkcije ključa lahko razvrstite dani iterable.
razvrščeno (iterable, key = len)
Tu len()
je vgrajena Pythonova funkcija za štetje dolžine predmeta.
Seznam je razvrščen glede na dolžino elementa, od najmanjšega do največjega.
Primer 3: Razvrstite seznam z uporabo sorted (), ki ima funkcijo ključa
# 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)
Izhod
Razvrščen seznam: ((4, 1), (2, 2), (1, 3), (3, 4))
Primer 4: Razvrščanje z več tipkami
Predpostavimo, da imamo naslednji 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) )
Seznam želimo razvrstiti tako, da bo na začetku študent z najvišjimi ocenami. Če imajo učenci enake ocene, jih je treba razvrstiti tako, da je mlajši udeleženec na prvem mestu.
Tovrstno razvrščanje lahko dosežemo z več tipkami tako, da namesto števila vrnemo tuple.
Dva nabora lahko primerjamo s primerjavo njihovih elementov, začenši od prvega. Če obstaja izenačenost (elementi so enaki), se primerja drugi element itd.
>>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True
Uporabimo to logiko za izdelavo logike razvrščanja.
# 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)
Izhod
(("Jimmy", 90, 22), ("Terence", 75, 12), ("David", 75, 20), ("Alison", 50, 18), ("John", 45, 12) )
Ker je logična funkcija razvrščanja majhna in se prilega v eno vrstico, se lambda
funkcija uporablja znotraj, key
namesto da posreduje ločeno ime funkcije.
Zgornji program lahko s lambda
funkcijo napišemo na naslednji način:
# 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)
Izhod
(("Jimmy", 90, 22), ("Terence", 75, 12), ("David", 75, 20), ("Alison", 50, 18), ("John", 45, 12) )
Če želite izvedeti več o lambda funkcijah, obiščite Python Lambda Functions.