Den sorterte () -funksjonen returnerer en sortert liste fra elementene i en iterabel.
Den sorted()
funksjon sorteres elementene av en gitt iterable i en bestemt rekkefølge (enten stigende eller synkende ) og returnerer den sorterte iterable som en liste.
Syntaksen til sorted()
funksjonen er:
sortert (iterable, key = None, reverse = False)
Parametere for den sorterte () funksjonen
sorted()
kan ta maksimalt tre parametere:
- iterable - En sekvens (streng, tuple, liste) eller samling (sett, ordbok, frossent sett) eller hvilken som helst annen iterator.
- revers (Valgfritt) - Hvis
True
, er den sorterte listen omvendt (eller sortert i synkende rekkefølge). StandardinnstillingerFalse
hvis ikke oppgitt. - key (Valgfritt) - En funksjon som fungerer som en nøkkel for sorteringssammenligning. Standardinnstillingen er
None
.
Eksempel 1: Sorter streng, liste og tupel
# 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))
Produksjon
('a', 'e', 'i', 'o', 'u') ('P', 'h', 'n', 'o', 't', 'y') ('a' , 'e', 'i', 'o', 'u')
Legg merke til at i alle tilfeller returneres en sortert liste.
Merk: En liste har også sorteringsmetoden () som fungerer på samme måte som sorted()
. Den eneste forskjellen er at sort()
metoden ikke returnerer noen verdi og endrer den opprinnelige listen.
Eksempel 2: Sorter i fallende rekkefølge
Den sorted()
funksjon aksepterer en reverse
parameter som en valgfri argument.
Innstilling reverse = True
sorterer iterabelen i synkende rekkefø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))
Produksjon
('u', 'o', 'i', 'e', 'a') ('u', 'o', 'i', 'e', 'a') ('u', 'o' , 'i', 'e', 'a')
nøkkel Parameter i Python sortert () -funksjon
Hvis du vil ha din egen implementering for sortering, sorted()
godtar du også en key
funksjon som en valgfri parameter.
Basert på den returnerte verdien til nøkkelfunksjonen, kan du sortere den gitte iterabelen.
sortert (iterable, key = len)
Her len()
er Pythons innebygde funksjon for å telle lengden på et objekt.
Listen er sortert basert på lengden på elementet, fra laveste antall til høyeste.
Eksempel 3: Sorter listen ved hjelp av sortert () som har en nøkkelfunksjon
# 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)
Produksjon
Sortert liste: ((4, 1), (2, 2), (1, 3), (3, 4))
Eksempel 4: Sortering med flere taster
La oss anta 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 ønsker å sortere listen på en slik måte at eleven med høyest karakter er i begynnelsen. I tilfelle elevene har like karakter, må de sorteres slik at den yngre deltakeren kommer først.
Vi kan oppnå denne typen sortering med flere taster ved å returnere tuple i stedet for et tall.
To tupler kan sammenlignes ved å sammenligne elementene deres fra første. Hvis det er uavgjort (elementene er like), sammenlignes det andre elementet, og så videre.
>>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True
La oss bruke denne logikken til å bygge vår sorteringslogikk.
# 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)
Produksjon
(('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )
Siden sorteringslogikkfunksjonen er liten og passer i en linje, brukes lambda
funksjonen i key
stedet for å sende et eget funksjonsnavn.
Ovennevnte program kan skrives ved hjelp av lambda
funksjonen på følgende måte:
# 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)
Produksjon
(('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )
For å lære mer om lambda-funksjoner, besøk Python Lambda Functions.