Python Counter-klasse maakt deel uit van de Collections-module. Counter is een subklasse van Dictionary en wordt gebruikt om elementen en hun telling bij te houden.
Python Counter
Counter is een ongeordende verzameling waarin elementen worden opgeslagen als Dict
-sleutels en hun telling als dictionary-waarde. De telling van Counter-elementen kan positieve, nul of negatieve gehele getallen zijn. Er is echter geen beperking op de sleutels en waarden. Hoewel waarden bedoeld zijn als getallen, kunnen we ook andere objecten opslaan.
Het maken van een Python Counter-object
We kunnen een lege Counter maken of beginnen met enkele initiële waarden.
from collections import Counter
# Lege Counter
counter = Counter()
print(counter) # Counter()
# Counter met initiële waarden
counter = Counter(['a', 'a', 'b'])
print(counter) # Counter({'a': 2, 'b': 1})
counter = Counter(a=2, b=3, c=1)
print(counter) # Counter({'b': 3, 'a': 2, 'c': 1})
We kunnen ook elk Iterable gebruiken als argument voor het maken van een Counter-object. Dus een string-literal en List kunnen ook worden gebruikt om een Counter-object te maken.
# Iterable als argument voor Counter
counter = Counter('abc')
print(counter) # Counter({'a': 1, 'b': 1, 'c': 1})
# Lijst als argument voor Counter
words_list = ['Cat', 'Dog', 'Horse', 'Dog']
counter = Counter(words_list)
print(counter) # Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})
# Dictionary als argument voor Counter
word_count_dict = {'Dog': 2, 'Cat': 1, 'Horse': 1}
counter = Counter(word_count_dict)
print(counter) # Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})
Zoals ik hierboven heb vermeld, kunnen we ook niet-numerieke gegevens gebruiken als telwaarden, maar dat zal het doel van de Counter-klasse tenietdoen.
# Counter werkt ook met niet-numerieke waarden
special_counter = Counter(name='Pankaj', age=20)
print(special_counter) # Counter({'name': 'Pankaj', 'age': 20})
Python Counter-methoden
Laten we eens kijken naar de methoden van de Counter-klasse en enkele andere bewerkingen die we erop kunnen uitvoeren.
Count van elementen ophalen
# tellen ophalen
counter = Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})
countDog = counter['Dog']
print(countDog) # 2
Als we proberen het aantal van een niet-bestaande sleutel op te halen, retourneert het 0 en gooit het geen KeyError
.
# tellen ophalen voor niet-bestaande sleutel, veroorzaakt geen KeyError
print(counter['Unicorn']) # 0
Count van elementen instellen
We kunnen ook het aantal van een bestaand element in de teller instellen. Als het element niet bestaat, wordt het toegevoegd aan de teller.
counter = Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})
# tellen instellen
counter['Horse'] = 0
print(counter) # Counter({'Dog': 2, 'Cat': 1, 'Horse': 0})
# tellen instellen for non-existing key, adds to Counter
counter['Unicorn'] = 1
print(counter) # Counter({'Dog': 2, 'Cat': 1, 'Unicorn': 1, 'Horse': 0})
Het verwijderen van een element uit Counter
We kunnen del
gebruiken om een element uit het tellerobject te verwijderen.
# Verwijder element uit Counter
del counter['Unicorn']
print(counter) # Counter({'Dog': 2, 'Cat': 1, 'Horse': 0})
elementen()
Deze methode retourneert de lijst met elementen in de teller. Alleen elementen met positieve tellingen worden geretourneerd.
counter = Counter({'Dog': 2, 'Cat': -1, 'Horse': 0})
# elements()
elements = counter.elements() # doesn't return elements with count 0 or less
for value in elements:
print(value)
De bovenstaande code zal “Hond” twee keer afdrukken omdat het aantal 2 is. Andere elementen worden genegeerd omdat ze geen positieve telling hebben. Counter is een ongeordende verzameling, dus elementen worden in willekeurige volgorde geretourneerd.
meest_voorkomende(n)
Deze methode retourneert de meest voorkomende elementen uit de teller. Als we geen waarde voor ‘n’ opgeven, wordt een gesorteerd woordenboek geretourneerd van meest voorkomende tot minst voorkomende elementen. We kunnen slicen om de minst voorkomende elementen in dit gesorteerde woordenboek te krijgen.
counter = Counter({'Dog': 2, 'Cat': -1, 'Horse': 0})
# most_common()
most_common_element = counter.most_common(1)
print(most_common_element) # [('Dog', 2)]
least_common_element = counter.most_common()[:-2:-1]
print(least_common_element) # [('Cat', -1)]
subtract() en update()
De subtract()
-methode van de Counter wordt gebruikt om elementaantallen van een andere teller af te trekken. De update()
-methode wordt gebruikt om tellingen van een andere teller toe te voegen.
counter = Counter('ababab')
print(counter) # Counter({'a': 3, 'b': 3})
c = Counter('abc')
print(c) # Counter({'a': 1, 'b': 1, 'c': 1})
# subtract
counter.subtract(c)
print(counter) # Counter({'a': 2, 'b': 2, 'c': -1})
# update
counter.update(c)
print(counter) # Counter({'a': 3, 'b': 3, 'c': 0})
Python Counter Arithmetic Operations
We kunnen ook enkele rekenkundige bewerkingen uitvoeren op Counters, net zoals bij getallen. Echter, alleen elementen met een positieve telling worden teruggegeven met deze bewerkingen.
# rekenkundige bewerkingen
c1 = Counter(a=2, b=0, c=-1)
c2 = Counter(a=1, b=-1, c=2)
c = c1 + c2 # return items having +ve count only
print(c) # Counter({'a': 3, 'c': 1})
c = c1 - c2 # keeps only +ve count elements
print(c) # Counter({'a': 1, 'b': 1})
c = c1 & c2 # intersection min(c1[x], c2[x])
print(c) # Counter({'a': 1})
c = c1 | c2 # union max(c1[x], c2[x])
print(c) # Counter({'a': 2, 'c': 2})
Diverse bewerkingen op Python Counter
Laten we eens kijken naar enkele codefragmenten voor diverse bewerkingen die we kunnen uitvoeren op Counter-objecten.
counter = Counter({'a': 3, 'b': 3, 'c': 0})
# diverse voorbeelden
print(sum(counter.values())) # 6
print(list(counter)) # ['a', 'b', 'c']
print(set(counter)) # {'a', 'b', 'c'}
print(dict(counter)) # {'a': 3, 'b': 3, 'c': 0}
print(counter.items()) # dict_items([('a', 3), ('b', 3), ('c', 0)])
# verwijder elementen met een telling van 0 of negatief
counter = Counter(a=2, b=3, c=-1, d=0)
counter = +counter
print(counter) # Counter({'b': 3, 'a': 2})
# verwijder alle elementen
counter.clear()
print(counter) # Counter()
Dat is alles voor de Python Counter-klasse.
Je kunt de volledige voorbeeldcode downloaden van mijn GitHub Repository.
Referentie: Python-documentatie
Source:
https://www.digitalocean.com/community/tutorials/python-counter-python-collections-counter