Python sorterad ()

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ärdena Falseom 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 reverseparameter som en valfri argument.

Inställning reverse = Truesorterar 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 keyfunktion 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 lambdafunktionen inuti keyistället för att skicka ett separat funktionsnamn.

Ovanstående program kan skrivas med hjälp av lambdafunktionen 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.

Intressanta artiklar...