Python gesorteerd ()

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 Truede gesorteerde lijst wordt omgekeerd (of gesorteerd in aflopende volgorde). Standaard Falseindien 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 reverseparameter als een optioneel argument.

Instelling reverse = Truesorteert 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 keyfunctie 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 lambdafunctie binnen gebruikt in keyplaats van een aparte functienaam door te geven.

Het bovenstaande programma kan lambdaop 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.

Interessante artikelen...