De functie gesorteerd () retourneert een gesorteerde lijst van de items in een iterabele.
De sorted()
functie sorteert de elementen van een bepaalde iterabele in een specifieke volgorde ( oplopend of aflopend ) en retourneert de gesorteerde iterabele als een lijst.
De syntaxis van de sorted()
functie is:
gesorteerd (itereerbaar, key = None, reverse = False)
Parameters voor de gesorteerde () functie
sorted()
kan maximaal drie parameters aannemen:
- iterable - Een reeks (string, tuple, lijst) of verzameling (set, woordenboek, bevroren set) of een andere iterator.
- reverse (Optioneel) - Als
True
de gesorteerde lijst wordt omgekeerd (of gesorteerd in aflopende volgorde). StandaardFalse
indien niet opgegeven. - key (Optioneel) - Een functie die dient als sleutel voor de sorteervergelijking. Standaard ingesteld op
None
.
Voorbeeld 1: Sorteer string, lijst en 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))
Uitvoer
('a', 'e', 'i', 'o', 'u') ('P', 'h', 'n', 'o', 't', 'y') ('a' , 'e', 'i', 'o', 'u')
Merk op dat in alle gevallen een gesorteerde lijst wordt geretourneerd.
Opmerking: een lijst heeft ook de methode sort () die op dezelfde manier werkt als sorted()
. Het enige verschil is dat de sort()
methode geen waarde retourneert en de oorspronkelijke lijst wijzigt.
Voorbeeld 2: Sorteer in aflopende volgorde
De sorted()
functie accepteert een reverse
parameter als een optioneel argument.
Instelling reverse = True
sorteert de iterabele in aflopende volgorde.
# 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))
Uitvoer
('u', 'o', 'i', 'e', 'a') ('u', 'o', 'i', 'e', 'a') ('u', 'o' , 'ik', 'e', 'a')
key Parameter in Python gesorteerd () functie
Als u uw eigen implementatie voor het sorteren wilt, sorted()
accepteert u ook een key
functie als een optionele parameter.
Op basis van de geretourneerde waarde van de sleutelfunctie, kunt u de gegeven iterabele sorteren.
gesorteerd (itereerbaar, key = len)
Hier len()
is de ingebouwde functie van Python om de lengte van een object te tellen.
De lijst is gesorteerd op basis van de lengte van het element, van het laagste aantal tot het hoogste aantal.
Voorbeeld 3: Sorteer de lijst met behulp van gesorteerd () met een sleutelfunctie
# 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)
Uitvoer
Gesorteerde lijst: ((4, 1), (2, 2), (1, 3), (3, 4))
Voorbeeld 4: sorteren met meerdere sleutels
Laten we aannemen dat we de volgende lijst hebben:
# 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) )
We willen de lijst zo sorteren dat de student met de hoogste cijfers aan het begin staat. Als de studenten gelijke cijfers hebben, moeten ze worden gesorteerd zodat de jongere deelnemer op de eerste plaats komt.
We kunnen dit type sortering bereiken met meerdere sleutels door tuple in plaats van een nummer te retourneren.
Twee tupels kunnen worden vergeleken door hun elementen te vergelijken, beginnend bij het begin. Als er een gelijkspel is (elementen zijn gelijk), wordt het tweede element vergeleken, enzovoort.
>>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True
Laten we deze logica gebruiken om onze sorteerlogica op te bouwen.
# 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)
Uitvoer
(('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )
Omdat de sorteerlogica klein is en in één regel past, wordt de lambda
functie binnen gebruikt in key
plaats van een aparte functienaam door te geven.
Het bovenstaande programma kan lambda
op de volgende manier met de functie worden geschreven :
# 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)
Uitvoer
(('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )
Ga naar Python Lambda Functions voor meer informatie over lambda-functies.