Python Counter in collections – Efficiënt tellen, updaten en rekenkundige operaties
Wat is Python Counter?
Python's Counter is een gespecialiseerde container die het aantal voorkomens van elk element in een iterable telt. Het erft van dict en slaat elementen op als keys met hun counts als values, wat het een ideaal hulpmiddel maakt voor hash-table-stijl tellen.
Waarom Python Counter gebruiken?
- Het slaat data op in een ongesorteerde, hash-table-achtige structuur, met elementen als keys en hun counts als values.
- Tellen van items in elke iterable – strings, lijsten, tuples of dictionaries – is eenvoudig.
- Ingebouwde rekenkundige operaties (optelling, aftrekking, intersectie, unie) stellen krachtige set-achtige manipulaties toe.
- Het kan counts van andere
Counterinstanties naadloos aggregaten.
Aan de slag met Counter
Importeer de class uit collections:
from collections import Counter
Nu kun je elke iterable aan Counter doorgeven en een count-mapping ontvangen.
Voorbeeld – Een lijst tellen
list1 = ['x','y','z','x','x','x','y','z'] print(Counter(list1))
Output:
Counter({'x': 4, 'y': 2, 'z': 2})
Voorbeeld – Een string tellen
my_str = "Welcome to Guru99 Tutorials!" print(Counter(my_str))
Output:
Counter({'o': 3, ' ': 3, 'u': 3, 'e': 2, 'l': 2, 't': 2, 'r': 2, '9': 2, 'W': 1, 'c': 1, 'm': 1, 'G': 1, 'T': 1, 'i': 1, 'a': 1, 's': 1, '!': 1})
Voorbeeld – Een dictionary tellen
dict1 = {'x': 4, 'y': 2, 'z': 2}
print(Counter(dict1))
Output:
Counter({'x': 4, 'y': 2, 'z': 2})
Voorbeeld – Een tuple tellen
tuple1 = ('x','y','z','x','x','x','y','z')
print(Counter(tuple1))
Output:
Counter({'x': 4, 'y': 2, 'z': 2})
Initialiseren, updaten en counters benaderen
Initialiseren
print(Counter("Welcome to Guru99 Tutorials!")) # string
print(Counter(['x','y','z','x','x','x','y','z'])) # list
print(Counter({'x': 4, 'y': 2, 'z': 2})) # dict
print(Counter(('x','y','z','x','x','x','y','z'))) # tuple
# Lege counter
_count = Counter()
Updaten
_count.update('Welcome to Guru99 Tutorials!')
print(_count)
Output:
Counter({'o': 3, ' ': 3, 'u': 3, 'e': 2, 'l': 2, 't': 2, 'r': 2, '9': 2, 'W': 1, 'c': 1, 'm': 1, 'G': 1, 'T': 1, 'i': 1, 'a': 1, 's': 1, '!': 1})
Counts benaderen
print('%s : %d' % ('u', _count['u']))
for char in 'Guru':
print('%s : %d' % (char, _count[char]))
Output:
u : 3 G : 1 u : 3 r : 2 u : 3
Een element verwijderen
del _count['x'] print(_count)
Output:
Counter({'y': 2, 'z': 2})
Rekenkundige operaties
Counter ondersteunt set-achtige rekenkunde. Positieve counts worden bewaard; negatieve waarden worden in het resultaat genegeerd.
counter1 = Counter({'x': 4, 'y': 2, 'z': -2})
counter2 = Counter({'x1': -12, 'y': 5, 'z': 4})
# Optelling
print(counter1 + counter2)
# Aftrekking
print(counter1 - counter2)
# Intersectie
print(counter1 & counter2)
# Unie
print(counter1 | counter2)
Output:
Counter({'y': 7, 'x': 4, 'z': 2})
Counter({'x1': 12, 'x': 4})
Counter({'y': 2})
Counter({'y': 5, 'x': 4, 'z': 4})
Belangrijkste methoden
- elements() – Retourneert een iterator over elementen met positieve counts.
- most_common([n]) – Retourneert de n meest voorkomende elementen als lijst van (elem, count) tuples.
- subtract(other) – Trekt counts van een andere Counter af.
- update(other) – Voegt counts van een andere Counter toe.
elements() gebruiken
counter = Counter({'x': 5, 'y': 2, 'z': -2, 'x1': 0})
for e in counter.elements():
print(e)
Output:
x x x x x y y
most_common() gebruiken
counter = Counter({'x': 5, 'y': 12, 'z': -2, 'x1': 0})
print(counter.most_common(2))
print(counter.most_common())
Output:
[('y', 12), ('x', 5)]
[('y', 12), ('x', 5), ('x1', 0), ('z', -2)]
subtract() gebruiken
c1 = Counter({'x': 5, 'y': 12, 'z': -2, 'x1': 0})
c2 = Counter({'x': 2, 'y': 5})
c1.subtract(c2)
print(c1)
Output:
Counter({'y': 7, 'x': 3, 'x1': 0, 'z': -2})
update() gebruiken
c1 = Counter({'x': 5, 'y': 12, 'z': -2, 'x1': 0})
c2 = Counter({'x': 2, 'y': 5})
c1.update(c2)
print(c1)
Output:
Counter({'y': 17, 'x': 7, 'x1': 0, 'z': -2})
Counts hertoekennen
counter = Counter({'x': 5, 'y': 12, 'z': -2, 'x1': 0})
counter['y'] = 20
print(counter)
Output:
Counter({'y': 20, 'x': 5, 'x1': 0, 'z': -2})
Element counts ophalen en instellen
counter = Counter({'x': 5, 'y': 12, 'z': -2, 'x1': 0})
print(counter['y'])
counter['y'] = 20
counter['y1'] = 10
print(counter)
Output:
12
Counter({'y': 20, 'y1': 10, 'x': 5, 'x1': 0, 'z': -2})
Samenvatting
- Counter is een dictionary-subclass die elementen in elke iterable telt.
- Het ondersteunt efficiënt tellen, rekenkundige operaties en een suite van utility-methoden.
- Veelvoorkomende use-cases: frequentieanalyse, histogram-generatie, data-aggregatie.
- Voor volledige documentatie, zie de officiële Python Counter docs.
Python
- Python's strip()-methode beheersen: Uitgebreide handleiding & praktische voorbeelden
- Python's str.count() beheersen: Karakters & substrings tellen met voorbeelden
- Python `format()` strings beheersen met duidelijke voorbeelden
- Python len(): Praktische handleiding voor het meten van objectlengtes
- Python's String.find()-methode beheersen: Syntaxis, voorbeelden & alternatieven
- Python lambda-functies beheersen: praktische voorbeelden & best practices
- Python round()-functie uitgelegd met praktische voorbeelden
- Python's map()-functie beheersen: syntaxis, voorbeelden en best practices
- Python timeit() – Uitvoeringstijd meten met praktische voorbeelden
- Python list.count(): Expert Gids met Praktische Voorbeelden
- Python List index() – Elementposities Vinden met Praktische Voorbeelden