Python’da Collections Modülü: Counter, defaultdict, namedtuple

Python’un collections modülü, standart veri yapıları olan listeler, demetler ve sözlüklerin ötesinde daha gelişmiş ve optimize edilmiş veri yapıları sağlar. Bu veri yapıları, belirli kullanım senaryoları için daha etkili ve esnek çözümler sunar. Bu bölümde, collections modülündeki Counter, defaultdict ve namedtuple veri yapıları incelenecektir.

1. Counter

Counter, bir iterable’daki elemanların kaç kez tekrarlandığını sayan bir sınıftır. Bu, özellikle veri analizi ve frekans sayımı gibi işlemler için oldukça kullanışlıdır.

a. Counter Tanımlama

Counter tanımlamak için, bir iterable (örneğin bir string, liste veya tuple) veya bir sözlük ile başlatabilirsiniz.

from collections import Counter

# String ile başlatma
char_count = Counter("abrakadabra")
print(char_count) # Counter({'a': 5, 'b': 2, 'r': 2, 'k': 1, 'd': 1})

# Liste ile başlatma
word_count = Counter(["elma", "muz", "elma", "çilek", "muz", "muz"])
print(word_count) # Counter({'muz': 3, 'elma': 2, 'çilek': 1})
b. Counter Metodları
  • Elemanların Sayısını Öğrenme: Elemanların kaç kez tekrarlandığını kolayca öğrenebilirsiniz.

    print(char_count["a"]) # 5
    print(char_count["z"]) # 0 (bulunmayan elemanlar için 0 döner)
  • Eleman Ekleme: Yeni bir eleman eklemek için, eleman adı ve sayısı belirtilebilir.

    char_count.update("alakazam")
    print(char_count) # Counter({'a': 8, 'b': 2, 'r': 2, 'k': 2, 'd': 1, 'l': 1, 'z': 1, 'm': 1})
    
  • En Yaygın Elemanlar: En sık kullanılan elemanları bulmak için most_common() metodunu kullanabilirsiniz.

    print(char_count.most_common(2)) # [('a', 8), ('b', 2)]
c. Counter Kullanım Alanları
  • Frekans Analizi: Veri setlerindeki elemanların frekansını belirlemek.
  • Anomali Tespiti: Normalden farklı olan veya nadiren görülen elemanları tespit etmek.

2. defaultdict

defaultdict, Python’daki standart sözlüklerin genişletilmiş bir versiyonudur. defaultdict, olmayan bir anahtara erişildiğinde otomatik olarak bir varsayılan değer döndürür. Bu, sözlükte bir anahtarın var olup olmadığını kontrol etme ihtiyacını ortadan kaldırır.

a. defaultdict Tanımlama

defaultdict, bir varsayılan fabrika fonksiyonu ile tanımlanır. Bu fonksiyon, olmayan bir anahtara erişildiğinde çağrılır ve varsayılan değeri döndürür.

from collections import defaultdict

# Varsayılan değeri 0 olan bir defaultdict
def_dict = defaultdict(int)
def_dict["elma"] += 1
print(def_dict) # defaultdict(<class 'int'>, {'elma': 1})
b. defaultdict Metodları
  • Varsayılan Değer Tanımlama: defaultdict, varsayılan fabrika fonksiyonu ile tanımlanır.

    def_dict = defaultdict(list) # Varsayılan değeri boş bir liste olarak ayarlar
    def_dict["meyveler"].append("elma")
    print(def_dict) # defaultdict(<class 'list'>, {'meyveler': ['elma']})
  • Mevcut Anahtarla Çalışma: Mevcut bir anahtarla çalışmak, standart sözlüklerle aynıdır.

    def_dict["meyveler"].append("muz")
    print(def_dict) # defaultdict(<class 'list'>, {'meyveler': ['elma', 'muz']})
c. defaultdict Kullanım Alanları
  • Gruplama ve Sınıflandırma: Verileri gruplamak ve kategorilere ayırmak.
  • Varsayılan Listeler veya Sayılar: Otomatik olarak varsayılan değerlerin oluşturulması gerektiğinde.

3. namedtuple

namedtuple, Python’daki standart tuple’ların genişletilmiş bir versiyonudur. namedtuple, her elemanın bir adla tanımlanmasına olanak tanır, bu da tuple’ların daha okunabilir ve anlaşılır olmasını sağlar.

a. namedtuple Tanımlama

namedtuple, collections.namedtuple fonksiyonu kullanılarak tanımlanır. Bu fonksiyon, bir ad ve alan adları alır.

from collections import namedtuple

# Bir Point adında namedtuple tanımlama
Point = namedtuple("Point", "x y")
p = Point(10, 20)
print(p) # Point(x=10, y=20)
b. namedtuple Kullanımı
  • Alanlara İsimle Erişim: Tuple elemanlarına isimleriyle erişebilirsiniz.

    print(p.x) # 10
    print(p.y) # 20
  • Geleneksel Tuple Gibi Davranma: namedtuple, aynı zamanda geleneksel bir tuple gibi davranabilir.

    print(p[0]) # 10
  • Dönüştürme: namedtuple verilerini bir sözlük gibi işlemek için ._asdict() metodunu kullanabilirsiniz.

    p_dict = p._asdict()
    print(p_dict) # {'x': 10, 'y': 20}
c. namedtuple Kullanım Alanları
  • Veri Yapıları: Sabit veri yapılarını temsil etmek için.
  • Okunaklı Kod Yazımı: Tuple’lara anlamlı isimler vererek kodun okunabilirliğini artırmak.
  • Veri Değişmezliği: namedtuple, değiştirilemez (immutable) veri yapıları sağlar, bu da veri bütünlüğünü korur.

collections modülündeki Counter, defaultdict ve namedtuple veri yapıları, Python’da veri işlemlerini daha verimli ve esnek hale getirir. Counter, veri setlerindeki elemanların frekansını sayarken, defaultdict varsayılan değerler ile çalışmayı kolaylaştırır. namedtuple ise tuple’lara isimlendirilmiş alanlar ekleyerek veri yapılarını daha okunabilir hale getirir. Bu veri yapıları, Python programlamada daha karmaşık ve optimize edilmiş çözümler üretmek için önemli araçlardır.

 

Comments

“Python’da Collections Modülü: Counter, defaultdict, namedtuple” için bir yanıt

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.