Funkcija sorted () vraća sortirani popis iz stavki u iteralu.
sorted()
Funkcija sortira elemente dano iterable u određenom redoslijedu (ili uzlazno ili silazno ) i vraća iterable razvrstani kao popis.
Sintaksa sorted()
funkcije je:
sortirano (iterable, key = None, reverse = False)
Parametri za funkciju sorted ()
sorted()
može uzeti najviše tri parametra:
- iterable - niz (niz, nabor, popis) ili zbirka (skup, rječnik, zamrznuti skup) ili bilo koji drugi iterator.
- obrnuto (nije obavezno) - ako
True
je sortirani popis obrnut (ili sortiran u opadajućem redoslijedu). Zadane vrijednostiFalse
ako nisu navedene. - tipka (nije obavezno) - funkcija koja služi kao ključ za usporedbu sortiranja. Zadane vrijednosti
None
.
Primjer 1: Poredaj niz, popis i tuple
# 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))
Izlaz
('a', 'e', 'i', 'o', 'u') ('P', 'h', 'n', 'o', 't', 'y') ('a' , "e", "i", "o", "u")
Primijetite da se u svim slučajevima vraća sortirani popis.
Napomena: Popis također ima metodu sort () koja se izvodi na isti način kao i sorted()
. Jedina razlika je u tome što sort()
metoda ne vraća nikakvu vrijednost i mijenja izvorni popis.
Primjer 2: Poredaj u padajućem redoslijedu
sorted()
Funkcija prihvaća reverse
parametar kao dodatni argument.
Postavljanje reverse = True
sortira iterable po padajućem redoslijedu.
# 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))
Izlaz
('u', 'o', 'i', 'e', 'a') ('u', 'o', 'i', 'e', 'a') ('u', 'o' , "i", "e", "a")
tipka Parametar u funkciji Python sorted ()
Ako želite vlastitu implementaciju za sortiranje, sorted()
prihvaća i key
funkciju kao neobavezni parametar.
Na temelju vraćene vrijednosti funkcije ključa, možete sortirati zadani iterable.
sortirano (iterable, key = len)
Ovdje len()
je ugrađena Pythonova funkcija za brojanje duljine objekta.
Popis se sortira na temelju duljine elementa, od najmanjeg do najvišeg broja.
Primjer 3: Sortiranje popisa pomoću sorted () koji ima funkciju 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)
Izlaz
Poredani popis: ((4, 1), (2, 2), (1, 3), (3, 4))
Primjer 4: Sortiranje s više ključeva
Pretpostavimo da imamo sljedeći popis:
# 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) )
Želimo sortirati popis na takav način da je student s najvišim ocjenama na početku. U slučaju da učenici imaju jednake ocjene, moraju se razvrstati tako da mlađi sudionik dođe na prvo mjesto.
Ovu vrstu sortiranja možemo postići s više ključeva vraćanjem korpice umjesto broja.
Dvije se korice mogu usporediti usporedbom njihovih elemenata počevši od prve. Ako postoji izjednačenje (elementi su jednaki), uspoređuje se drugi element itd.
>>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True
Upotrijebimo ovu logiku za izgradnju logike sortiranja.
# 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)
Izlaz
(('' Jimmy ', 90, 22), (' Terence ', 75, 12), (' David ', 75, 20), (' Alison ', 50, 18), ("John", 45, 12) )
Budući da je logička funkcija sortiranja mala i stane u jedan redak, lambda
funkcija se koristi iznutra key
umjesto da prosljeđuje zasebno ime funkcije.
Gornji program može se napisati pomoću lambda
funkcije na sljedeći 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)
Izlaz
(('' Jimmy ', 90, 22), (' Terence ', 75, 12), (' David ', 75, 20), (' Alison ', 50, 18), ("John", 45, 12) )
Da biste saznali više o lambda funkcijama, posjetite Python Lambda funkcije.