De collections
module in Python is een schatkamer vol handige en geavanceerde datatypes. Hoewel lijsten, tuples en dictionaries al enorm krachtig zijn, biedt de collections
module extra tools die je helpen om efficiënter en leesbaarder te programmeren. In dit hoofdstuk leer je vier belangrijke tools uit deze module kennen: Counter
, defaultdict
, namedtuple
, en deque
. 🎉
1. Counter
: Voor Frequentietellingen #
De Counter
klasse is een speciaal soort dictionary waarmee je eenvoudig kunt tellen hoe vaak elk item voorkomt in een collectie. Dit is perfect voor tekstanalyses, spelstatistieken, of waar je ook maar frequenties moet bijhouden.
Hoe werkt Counter
? #
Counter
neemt een iterable (zoals een lijst of string) en telt automatisch hoe vaak elk element voorkomt.
Voorbeeld:
from collections import Counter
woorden = ["appel", "banaan", "appel", "kers", "banaan", "appel"]
frequentie = Counter(woorden)
print(frequentie)
# Toont: Counter({'appel': 3, 'banaan': 2, 'kers': 1})
PythonHandige methoden van Counter
#
most_common(n)
: Geeft den
meest voorkomende items.
print(frequentie.most_common(2))
# Toont: [('appel', 3), ('banaan', 2)]
Python- Tellen van letters in een string:
tekst = "banana"
letter_frequentie = Counter(tekst)
print(letter_frequentie)
# Toont: Counter({'a': 3, 'n': 2, 'b': 1})
Python2. defaultdict
: Voor Dictionaries met Standaardwaarden #
De defaultdict
is een geavanceerde versie van een gewone dictionary. In plaats van een foutmelding te geven als een sleutel niet bestaat, geeft defaultdict
automatisch een standaardwaarde terug.
Waarom defaultdict
gebruiken? #
Met een gewone dictionary krijg je een fout als je een sleutel probeert te gebruiken die nog niet bestaat:
d = {}
# print(d["onbekend"]) # KeyError: 'onbekend'
PythonMet defaultdict
kun je een standaardwaarde instellen, zoals 0
voor getallen of een lege lijst.
Voorbeeld:
from collections import defaultdict
# Maak een defaultdict met standaardwaarde 0
frequenties = defaultdict(int)
woorden = ["appel", "banaan", "appel"]
for woord in woorden:
frequenties[woord] += 1
print(frequenties)
# Toont: defaultdict(<class 'int'>, {'appel': 2, 'banaan': 1})
PythonAndere toepassingen #
- Lijsten groeperen:
groepen = defaultdict(list)
data = [("groep1", "Alice"), ("groep1", "Bob"), ("groep2", "Charlie")]
for groep, naam in data:
groepen[groep].append(naam)
print(groepen)
# Toont: defaultdict(<class 'list'>,
# {'groep1': ['Alice', 'Bob'], 'groep2': ['Charlie']})
Python3. namedtuple
: Voor Leesbare Tuples met Veldnamen #
Een namedtuple
is een tuple met veldnamen, waardoor je de items in de tuple kunt benaderen alsof het attributen zijn. Dit maakt je code leesbaarder en onderhoudsvriendelijker.
Waarom namedtuple
gebruiken? #
Gewone tuples zijn handig, maar soms lastig te begrijpen:
persoon = ("Alice", 30, "programmeur")
print(persoon[0])
# Wat is [0]? De naam? De leeftijd?
PythonMet een namedtuple
kun je de velden bij naam gebruiken:
from collections import namedtuple
Persoon = namedtuple("Persoon", ["naam", "leeftijd", "beroep"])
alice = Persoon(naam="Alice", leeftijd=30, beroep="programmeur")
print(alice.naam) # Toont: Alice
print(alice.leeftijd) # Toont: 30
PythonPraktisch gebruik #
- Voor coördinaten of geometrie:
Punt = namedtuple("Punt", ["x", "y"])
p1 = Punt(10, 20)
print(p1.x, p1.y) # Toont: 10 20
Python- Voor API-resultaten: Stel dat je data van een API krijgt, zoals gebruikersinformatie. Een
namedtuple
maakt het duidelijk en gestructureerd.
4. deque
: Voor Efficiënte Dubbelzijdige Wachtrijen #
De deque
(uitgesproken als “deck”) is een datastructuur die lijkt op een lijst, maar veel efficiënter is voor bewerkingen aan beide uiteinden (voorkant en achterkant).
Waarom deque
gebruiken? #
Met een gewone lijst is het toevoegen of verwijderen van items aan het begin inefficiënt, omdat alle items moeten worden verschoven. deque
lost dit probleem op en maakt die operaties supersnel.
Voorbeeld:
from collections import deque
wachtrij = deque(["Alice", "Bob", "Charlie"])
wachtrij.append("Diana") # Voeg toe aan de achterkant
wachtrij.appendleft("Eve") # Voeg toe aan de voorkant
print(wachtrij) # deque(['Eve', 'Alice', 'Bob', 'Charlie', 'Diana'])
PythonPraktische methoden #
popleft()
enpop()
: Verwijder items van de voorkant of achterkant.
wachtrij.popleft()
# Verwijder het eerste item
print(wachtrij)
# deque(['Alice', 'Bob', 'Charlie', 'Diana'])
Pythonrotate()
: Draai de deque met een bepaald aantal stappen.
wachtrij.rotate(2)
print(wachtrij)
# deque(['Charlie', 'Diana', 'Eve', 'Alice', 'Bob'])
PythonVeelvoorkomende fouten en tips #
- Verwar
defaultdict
niet met een gewone dictionary:
Gebruikdefaultdict
alleen als je een standaardwaarde nodig hebt; anders werkt een gewone dictionary prima. Counter
is niet geschikt voor alle tellers:
Als je complexe bewerkingen nodig hebt, zoals tijdsafhankelijke frequenties, moet je misschien een aangepaste oplossing overwegen.- Houd
deque
klein:
Voor gigantische datasets kan een andere datastructuur, zoals eenheap
of gespecialiseerde bibliotheek, geschikter zijn.
Samenvatting #
De collections
module biedt krachtige tools die verder gaan dan de standaard lijsten en dictionaries. Of je nu veelvoorkomende items wilt tellen met Counter
, efficiënt wilt groeperen met defaultdict
, duidelijke datamodellen wilt maken met namedtuple
, of supersnelle wachtrijen nodig hebt met deque
, deze tools maken je code cleaner, leesbaarder en sneller.
Probeer elk van deze tools uit en ontdek hoe ze je Python-programma’s naar een hoger niveau tillen. 🚀🎉