Funktionen sorteret () returnerer en sorteret liste fra elementerne i en iterabel.
Den sorted()
funktion sorteres elementerne i en given Iterable i en bestemt rækkefølge (enten stigende eller faldende ) og returnerer sorteret Iterable som en liste.
Funktionens syntaks sorted()
er:
sorteret (iterabel, nøgle = Ingen, omvendt = Falsk)
Parametre for den sorterede () funktion
sorted()
kan maksimalt tage tre parametre:
- iterable - En sekvens (streng, tuple, liste) eller samling (sæt, ordbog, frossent sæt) eller enhver anden iterator.
- reverse (Valgfrit) - Hvis
True
, er den sorterede liste omvendt (eller sorteret i faldende rækkefølge). Standardindstillinger,False
hvis ikke angivet. - key (Valgfri) - En funktion, der fungerer som en nøgle til sorteringssammenligningen. Som standard er
None
.
Eksempel 1: Sorter streng, liste og 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))
Produktion
('a', 'e', 'i', 'o', 'u') ('P', 'h', 'n', 'o', 't', 'y') ('a' , 'e', 'i', 'o', 'u')
Bemærk, at der i alle tilfælde returneres en sorteret liste.
Bemærk: En liste har også sorteringsmetoden (), der fungerer på samme måde som sorted()
. Den eneste forskel er, at sort()
metoden ikke returnerer nogen værdi og ændrer den oprindelige liste.
Eksempel 2: Sorter i faldende rækkefølge
Den sorted()
funktion accepterer en reverse
parameter som en valgfri argument.
Indstilling reverse = True
sorterer iterablen i faldende rækkefølge.
# 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))
Produktion
('u', 'o', 'i', 'e', 'a') ('u', 'o', 'i', 'e', 'a') ('u', 'o' , 'i', 'e', 'a')
nøgle Parameter i Python sorteret () funktion
Hvis du vil have din egen implementering til sortering, sorted()
accepterer du også en key
funktion som en valgfri parameter.
Baseret på den returnerede værdi af nøglefunktionen kan du sortere den givne iterabel.
sorteret (iterabel, nøgle = len)
Her len()
er Pythons indbyggede funktion til at tælle længden af et objekt.
Listen er sorteret ud fra elementets længde, fra det laveste antal til det højeste.
Eksempel 3: Sorter listen ved hjælp af sorteret () med en nøglefunktion
# 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)
Produktion
Sorteret liste: ((4, 1), (2, 2), (1, 3), (3, 4))
Eksempel 4: Sortering med flere taster
Lad os antage, at vi har følgende liste:
# 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) )
Vi vil sortere listen på en sådan måde, at den studerende med de højeste karakterer er i starten. Hvis de studerende har lige karakter, skal de sorteres, så den yngre deltager kommer først.
Vi kan opnå denne type sortering med flere nøgler ved at returnere tuple i stedet for et tal.
To tupler kan sammenlignes ved at sammenligne deres elementer startende fra første. Hvis der er uafgjort (elementerne er ens), sammenlignes det andet element osv.
>>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True
Lad os bruge denne logik til at opbygge vores sorteringslogik.
# 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)
Produktion
(('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )
Da sorteringslogikfunktionen er lille og passer i en linje, bruges lambda
funktionen inde i key
stedet for at videregive et separat funktionsnavn.
Ovenstående program kan skrives ved hjælp af lambda
funktionen på følgende måde:
# 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)
Produktion
(('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )
Hvis du vil lære mere om lambda-funktioner, skal du besøge Python Lambda-funktioner.