İçeriğe geç

Python Counter Sınıfı Kullanımı

Python Counter Sınıfı Kullanımı

Python’un collections modülünde yer alan Counter sınıfı, sayım yapma işlemini kolaylaştıran bir veri yapısıdır. Özellikle bir iterable (örneğin listeler, stringler vb.) içerisindeki öğelerin frekansını hızlıca bulmak için kullanılır. Counter sınıfının çıktısı bir sözlüktür(dictionary). İçine string veya herhangi bir liste gönderdiğimizde liste içindeki her bir elemanın frekansını hesaplar ve sonuç olarak bir dictionary döndürür. Mülakatlar esnasında ilgili soruda bir dizi ve listenin elemanlarının frekansını bulmak için tekerleği yeniden icat etmeden Counter sınıfını kullanıp kullanamayacağınızı başta sorabilir ve bu sınıfı kullanarak soruyla ilgili diğer kısımları implement ederken zaman kazanabilirsiniz. Bu sınıfın zaman ve bellek karmaşıklığı O(n)’dir.

1. Counter Nedir?

Counter, bir iterable içerisindeki öğelerin kaç kez tekrarlandığını saymak için kullanılan bir sınıftır. Bir sözlük gibi çalışır; anahtarlar iterable içerisindeki öğeler olurken, değerler ise bu öğelerin kaç kez tekrarlandığını gösterir.

Örnek Kullanım:

from collections import Counter
metin = "python programming"
counter = Counter(metin)
print(counter)

Çıktı:

Counter({'p': 2, 'o': 2, 'g': 2, 'r': 2, 'm': 2, 'n': 1, 'y': 1, 't': 1, 'h': 1, 'i': 1})

Bu örnekte, Counter sınıfı her harfi sayar ve frekansını verir.

2. Counter Oluşturma

Counter sınıfı birkaç farklı yolla oluşturulabilir:

2.1. Liste, String veya Diğer Iterable Üzerinden

from collections import Counter
liste = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
counter = Counter(liste)
print(counter)

Çıktı:

Counter({4: 4, 3: 3, 2: 2, 1: 1})

2.2. Sözlükten

Bir sözlüğü Counter sınıfına vererek de bir sayaç oluşturulabilir.

from collections import Counter
sozluk = {'elma': 3, 'armut': 2, 'kiraz': 5}
counter = Counter(sozluk)
print(counter)

Çıktı:

Counter({'kiraz': 5, 'elma': 3, 'armut': 2})

2.3. Anahtar-Değer Çiftleri ile

Counter, anahtar-değer çiftleri ile doğrudan da oluşturulabilir:

counter = Counter(elma=3, armut=2, kiraz=5)
print(counter)

Çıktı:

Counter({'kiraz': 5, 'elma': 3, 'armut': 2})

3. Counter Sınıfının Temel Metotları

3.1. elements()

Counter’daki her öğeyi, sayısı kadar tekrar eden bir iterator döndürür.

counter = Counter(a=2, b=3, c=1)
print(list(counter.elements()))

Çıktı:

['a', 'a', 'b', 'b', 'b', 'c']

3.2. most_common()

Bu metod, en yaygın öğeleri ve frekanslarını sıralı bir şekilde döndürür.

counter = Counter('mississippi')
print(counter.most_common(2)) # En yaygın 2 öğeyi döndürür

Çıktı:

[('i', 4), ('s', 4)]

3.3. subtract()

Bu metod, sayacın öğelerinden çıkartma yapar. Bir iterable veya başka bir Counter nesnesi kullanılabilir.

counter = Counter(a=4, b=2, c=0, d=-2)
counter.subtract(Counter(a=1, b=2, c=3, d=1))
print(counter)

Çıktı:

Counter({'a': 3, 'c': -3, 'd': -3, 'b': 0})

4. Counter ile Aritmetik İşlemler

Counter sınıfı aritmetik işlemleri destekler. İki Counter nesnesi arasında toplama, çıkarma, kesişim (min), birleşim (max) gibi işlemler yapılabilir.

4.1. Toplama

İki Counter’ı toplayarak her öğenin frekanslarını birleştirebilirsiniz:

counter1 = Counter(a=3, b=1)
counter2 = Counter(a=1, b=2, c=1)
print(counter1 + counter2)

Çıktı:

Counter({'a': 4, 'b': 3, 'c': 1})

4.2. Çıkarma

İki Counter’ı çıkararak öğelerin frekanslarını fark alabilirsiniz:

print(counter1 - counter2)

Çıktı:

Counter({'a': 2})

4.3. Kesişim (min)

İki Counter’ın kesişimi, her öğenin minimum frekansını alır:

print(counter1 & counter2)

Çıktı:

Counter({'a': 1, 'b': 1})

4.4. Birleşim (max)

İki Counter’ın birleşimi, her öğenin maksimum frekansını alır:

print(counter1 | counter2)

Çıktı:

Counter({'a': 3, 'b': 2, 'c': 1})

5. Gerçek Dünya Kullanım Alanları

Counter sınıfı, birçok gerçek dünya probleminde kullanılabilir. Örneğin, bir metindeki harflerin veya kelimelerin frekansını bulma, bir anketten en popüler yanıtları toplama gibi işlemler için oldukça faydalıdır.

5.1. Bir Metindeki Kelime Frekansını Bulma

metin = "python is great and python is dynamic"
kelimeler = metin.split()
counter = Counter(kelimeler)
print(counter.most_common(2)) # En yaygın iki kelime

Çıktı:

[('python', 2), ('is', 2)]

5.2. Oylama Sonuçlarını Hesaplama

oylar = ['A', 'B', 'A', 'C', 'B', 'A']
counter = Counter(oylar)
print(counter)

Çıktı:

Counter({'A': 3, 'B': 2, 'C': 1})

Sonuç

Python’un Counter sınıfı, öğelerin frekanslarını hızlı ve etkili bir şekilde saymak için kullanışlı bir araçtır. Aritmetik işlemler, kesişim ve birleşim gibi özellikler sayesinde veri analizi ve istatistiksel işlemler için oldukça uygundur. Günlük programlama problemlerinde sıkça kullanılabilecek bu veri yapısı, özellikle büyük veri setlerinde oldukça faydalıdır.