Sorteren is een fundamentele vaardigheid in programmeren, en Python maakt het ongelooflijk eenvoudig én flexibel. Met de ingebouwde functie sorted()
kun je niet alleen lijsten alfabetisch of numeriek sorteren, maar ook je eigen logica toevoegen om de volgorde te bepalen. Dit doe je met de key
-parameter en, vaak, lambda-functies. Dit hoofdstuk laat je zien hoe je geavanceerde sorteringen uitvoert en je programma’s slimmer maakt. 🎉
Sorteren met custom logica #
De standaard functie sorted()
sorteert lijsten op natuurlijke volgorde, zoals cijfers van klein naar groot of strings alfabetisch. Maar wat als je op een complexere manier wilt sorteren, zoals:
- Strings op basis van hun lengte?
- Dictionaries op een specifieke waarde?
Daar komt de key
-parameter van pas! Hiermee kun je aangeven welke eigenschap van elk item moet worden gebruikt bij het sorteren.
Syntax van sorted()
met key
#
sorted(iterable, key=functie, reverse=False)
Pythoniterable
: De lijst of collectie die je wilt sorteren.key
: Een functie die bepaalt waarop gesorteerd wordt.reverse
: StandaardFalse
, maar zet opTrue
om in omgekeerde volgorde te sorteren.
Voorbeelden van geavanceerde sortering #
1. Sorteren op lengte van strings #
Stel dat je een lijst van woorden hebt en deze wilt sorteren op basis van hun lengte in plaats van alfabetische volgorde.
Voorbeeld:
woorden = ["appel", "banaan", "kers", "mango"]
# Sorteer op lengte
gesorteerd = sorted(woorden, key=len)
print(gesorteerd) # ['kers', 'mango', 'appel', 'banaan']
PythonWat gebeurt hier?
- De
len
-functie wordt gebruikt als de key. sorted()
sorteert de woorden op basis van het resultaat vanlen
.
Omgekeerde volgorde (langste eerst):
gesorteerd = sorted(woorden, key=len, reverse=True)
print(gesorteerd)
# ['banaan', 'appel', 'mango', 'kers']
Python2. Sorteren met een lambda-functie #
Een lambda-functie is een kleine anonieme functie die je direct kunt gebruiken als argument in key
. Dit is handig als je een aangepaste logica wilt toepassen.
Voorbeeld: Sorteren op het laatste teken van elk woord
woorden = ["appel", "banaan", "kers", "mango"]
# Sorteer op het laatste teken
gesorteerd = sorted(woorden, key=lambda woord: woord[-1])
print(gesorteerd)
# ['banaan', 'mango', 'appel', 'kers']
PythonWat gebeurt hier?
- De lambda-functie
lambda woord: woord[-1]
retourneert het laatste teken van elk woord. sorted()
gebruikt dit om de volgorde te bepalen.
3. Sorteren op een specifieke waarde in een dictionary #
Wat als je een lijst van dictionaries hebt en wilt sorteren op basis van een specifieke waarde? Geen probleem! Gebruik een lambda-functie om de waarde te selecteren.
Voorbeeld:
studenten = [
{"naam": "Alice", "cijfer": 8},
{"naam": "Bob", "cijfer": 6},
{"naam": "Charlie", "cijfer": 9}
]
# Sorteer op 'cijfer'
gesorteerd = sorted(studenten, key=lambda student: student["cijfer"])
print(gesorteerd)
# [{'naam': 'Bob', 'cijfer': 6},
# {'naam': 'Alice', 'cijfer': 8},
# {'naam': 'Charlie', 'cijfer': 9}]
PythonWat gebeurt hier?
- De lambda-functie
lambda student: student["cijfer"]
geeft het cijfer van elke student terug. sorted()
gebruikt dit om de studenten te rangschikken.
4. Meerdere sorteercriteria #
Soms wil je sorteren op meerdere eigenschappen, bijvoorbeeld eerst op leeftijd en dan alfabetisch op naam. Dit kun je bereiken door een tuple terug te geven in de key
.
Voorbeeld:
personen = [
{"naam": "Alice", "leeftijd": 30},
{"naam": "Bob", "leeftijd": 25},
{"naam": "Charlie", "leeftijd": 25}
]
# Sorteer op leeftijd, en bij gelijke leeftijd op naam
gesorteerd = sorted(personen, key=lambda persoon: (persoon["leeftijd"], persoon["naam"]))
print(gesorteerd)
# [{'naam': 'Bob', 'leeftijd': 25},
# {'naam': 'Charlie', 'leeftijd': 25},
# {'naam': 'Alice', 'leeftijd': 30}]
PythonWat gebeurt hier?
- De lambda-functie retourneert een tuple
(leeftijd, naam)
. sorted()
gebruikt eerst de leeftijd om te sorteren, en bij een gelijke leeftijd de naam.
Tips voor geavanceerde sortering #
- Gebruik ingebouwde functies waar mogelijk:
Python-functies zoalslen
,str.lower
, enint
werken perfect metkey
en zijn snel. - Gebruik lambda voor maatwerk:
Lambda-functies zijn ideaal voor eenvoudige sorteerlogica zonder dat je aparte functies hoeft te definiëren. - Complexere logica? Maak een aparte functie:
Als de sorteerlogica ingewikkeld wordt, definieer dan een aparte functie in plaats van een lambda.
def laatste_teken(woord):
return woord[-1]
gesorteerd = sorted(woorden, key=laatste_teken)
PythonSamenvatting #
Geavanceerde sortering met sorted()
en de key
-parameter maakt het mogelijk om lijsten en andere iterables op vrijwel elke denkbare manier te ordenen. Of je nu woorden op lengte wilt sorteren, dictionaries wilt rangschikken op specifieke waarden, of meerdere criteria wilt combineren, Python biedt een elegante oplossing.
Met lambda-functies kun je sorteerlogica op maat maken, terwijl de ingebouwde functies zoals len
en str.lower
je nog meer kracht geven. Experimenteer met de voorbeelden en ontdek hoe sorteren je programmeerwerk eenvoudiger en effectiever kan maken. 🚀🎉