Bir liste veya dize içersinde en çok geçen kelime, sayı vb. gibi ifadelerin sayısını bulmak için kullanılır. Kullanım için ilk önce Counter modülünün içe aktarılması gerekmektedir.
from collections import Counter
Kullanım şekli: Counter("liste,dizin vb.")
Counter modülü altında olan özelliklere göz atalım;
['__add__', '__and__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__le__', '__len__', '__lt__', '__missing__', '__module__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', ' __setattr__', '__setitem__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__weakref__', '_keep_positive', 'clear', 'copy', 'elements', 'fromkeys', 'get', 'items', 'keys', 'most_common', 'pop', 'popitem', 'setdefault', 'subtract', 'update', 'values']
Bu konu hakkında örnekler yaparak konuyu anlamaya çalışalım.
Örnek-1:
#Random olarak 24 sayıdan oluşan bir liste oluşturuldu, aynı değerlerden birkaç tane oluşsun diye 4 farklı liste toplandı.
import random
list1=random.sample(range(10),k=6)
list2=random.sample(range(10),k=6)
list3=random.sample(range(10),k=6)
list4=random.sample(range(10),k=6)
listTotal=list1+list2+list3+list4
print(listTotal)
Çıktı:
[9, 8, 3, 5, 0, 6, 8, 1, 0, 3, 4, 7, 5, 4, 2, 8, 6, 3, 0, 7, 6, 2, 9, 4]
Counter(listTotal)
Çıktı:
Counter({9: 2, 8: 3, 3: 3, 5: 2, 0: 3, 6: 3, 1: 1, 4: 3, 7: 2, 2: 2})
Yukarıdaki örnekte görüldüğü gibi 9'dan 2 tane, 8'den 3 tane diye devam eden bir değer döndürülmüş oldu.
Örnek-2:
istiklalMarsi="""Dalgalan sen de şafaklar gibi ey şanlı hilâl;
Olsun artık dökülen kanlarımın hepsi helâl.
Ebediyen sana yok, ırkıma yok izmihlâl:
Hakkıdır, hür yaşamış bayrağımın hürriyet;
Hakkıdır, Hakk’a tapan milletimin istiklâl!"""
Counter(istiklalMarsi)
Çıktı:
Counter({'D': 1, 'a': 23, 'l': 17, 'g': 2, 'n': 12, ' ': 25, 's': 5, 'e': 10, 'd': 5, 'ş': 4, 'f': 1, 'k': 14, 'r': 10, 'i': 13, 'b': 3, 'y': 7, 'ı': 13, 'h': 6, 'â': 4, ';': 2, '\n': 4, 'O': 1, 'u': 1, 't': 5, 'ö': 1, 'ü': 3, 'm': 7, 'p': 2, '.': 1, 'E': 1, 'o': 2, ',': 3, 'z': 1, ':': 1, 'H': 3, 'ğ': 1, '’': 1, '!': 1})
İstiklal Marşımızın son kıtasında geçen harf sayıları yukarıdaki listelenmiştir. Eğer harf olarak saydırma işlemi değil de kelime olarak ayırmak isteseydik;
print(istiklalMarsi.split())
Çıktı:
['Dalgalan', 'sen', 'de', 'şafaklar', 'gibi', 'ey', 'şanlı', 'hilâl;', 'Olsun', 'artık', 'dökülen', 'kanlarımın', 'hepsi', 'helâl.', 'Ebediyen', 'sana', 'yok,', 'ırkıma', 'yok', 'izmihlâl:', 'Hakkıdır,', 'hür', 'yaşamış', 'bayrağımın', 'hürriyet;', 'Hakkıdır,', 'Hakk’a', 'tapan', 'milletimin', 'istiklâl!']
Yukarıdaki liste halinde Counter içerisine yazılırısa;
print(Counter(istiklalMarsi.split()))
Çıktı:
Counter({'Hakkıdır,': 2, 'Dalgalan': 1, 'sen': 1, 'de': 1, 'şafaklar': 1, 'gibi': 1, 'ey': 1, 'şanlı': 1, 'hilâl;': 1, 'Olsun': 1, 'artık': 1, 'dökülen': 1, 'kanlarımın': 1, 'hepsi': 1, 'helâl.': 1, 'Ebediyen': 1, 'sana': 1, 'yok,': 1, 'ırkıma': 1, 'yok': 1, 'izmihlâl:': 1, 'hür': 1, 'yaşamış': 1, 'bayrağımın': 1, 'hürriyet;': 1, 'Hakk’a': 1, 'tapan': 1, 'milletimin': 1, 'istiklâl!': 1})
En çok geçen kelimenin ne olduğunu görmek için ise;
Counter(istiklalMarsi.split()).most_common(1)
Çıktı:
[('Hakkıdır,', 2)]