Funktionen sorterad () returnerar en sorterad lista från objekten i en iterabel.
Den sorted()
funktionen sorterar elementen i en given iterable i en viss ordning (antingen stigande eller fallande ) och återgår den sorterade iterable som en lista.
sorted()
Funktionens syntax är:
sorterad (iterabel, tangent = Ingen, omvänd = Falsk)
Parametrar för den sorterade () funktionen
sorted()
kan ta högst tre parametrar:
- iterable - En sekvens (sträng, tupel, lista) eller samling (uppsättning, ordbok, frusen uppsättning) eller någon annan iterator.
- omvänd (valfritt) - Om
True
, den sorterade listan är omvänd (eller sorterad i fallande ordning). StandardvärdenaFalse
om de inte tillhandahålls. - key (Valfritt) - En funktion som fungerar som en nyckel för sorteringsjämförelsen. Standardvärden är
None
.
Exempel 1: Sortera sträng, lista och 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')
Observera att en sorterad lista alltid returneras.
Obs! En lista har också sort () -metoden som fungerar på samma sätt som sorted()
. Den enda skillnaden är att sort()
metoden inte returnerar något värde och ändrar originallistan.
Exempel 2: Sortera i fallande ordning
Den sorted()
funktionen tar en reverse
parameter som en valfri argument.
Inställning reverse = True
sorterar iterabel i fallande ordning.
# 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')
key Parameter i Python sorterad () funktion
Om du vill ha din egen implementering för sortering sorted()
accepterar du också en key
funktion som en valfri parameter.
Baserat på det returnerade värdet för nyckelfunktionen kan du sortera den givna iterabeln.
sorterad (iterabel, nyckel = len)
Här len()
är Pythons inbyggda funktion för att räkna längden på ett objekt.
Listan sorteras baserat på elementets längd, från det lägsta antalet till det högsta.
Exempel 3: Sortera listan med hjälp av sorterad () med en nyckelfunktion
# 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
Sorterad lista: ((4, 1), (2, 2), (1, 3), (3, 4))
Exempel 4: Sortering med flera tangenter
Låt oss anta att vi har följande lista:
# 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 vill sortera listan på ett sådant sätt att studenten med högsta betyg är i början. Om eleverna har samma betyg måste de sorteras så att den yngre deltagaren kommer först.
Vi kan uppnå denna typ av sortering med flera tangenter genom att returnera tuple istället för ett nummer.
Två tuples kan jämföras genom att jämföra deras element från början. Om det finns en slips (elementen är lika) jämförs det andra elementet och så vidare.
>>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True
Låt oss använda den här logiken för att bygga vår 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) )
Eftersom sorteringslogikfunktionen är liten och passar i en rad används lambda
funktionen inuti key
istället för att skicka ett separat funktionsnamn.
Ovanstående program kan skrivas med hjälp av lambda
funktionen på följande sätt:
# 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) )
För att lära dig mer om lambdafunktioner, besök Python Lambda-funktioner.