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.
Bir yanıt yazın