Python Collections

A.Oğuzhan Durmaz
Data Runner
Published in
3 min readMay 4, 2020
Photo by Clem Onojeghuo on Unsplash

Bu yazımızda Python’da Koleksiyonlara göz atacağız. Bu modül Python 3.10 ile collections.abc modülüne taşınacak. Kullanmak için oradan ulaşabiliriz. Benim göstereceğim örneklerde collections kullanacağım. Hadi başlayalım.

ChainMap

Bir dizi map veri türlerini tek bir birim olarak ele alabilmemizi sağlayan bir sınıftır. Genellikle yeni bir dictionary oluşturmaktan ve update() çağrılarından daha hızlıdır. Birden çok map ve dictionary türlerini bir arada toplayıp tek ve güncellenebilen bir görüntü oluşturur. Herhangi bir map tanımlanmazsa otomatik boş bir dictionary içinde barındırır.

Örnekte iki dictionary var ve bunları ChainMap içine veriyoruz. Tanımladığımız chaini yazdırdığımız da içinde iki verimize de barındırdığını görüyoruz.

new_child()

ChainMap’in yeni bir örneğini ilk elemanı boş bir map olacak şekilde üretmemize olanak sağlıyor.

Değer ekleme — çıkarma

Ekleme, çıkarma yaparken yalnızca ilk eşleşmede işlem yapılır.

Görüldüğü gibi ekleme yaparken yada silerken ChainMap’in ilk elemanına işlem yaptı.

Diğerlerinde bulunan fakat ilk elemanda bulunmayan bir key ile işlem yapmaya çalışalım.

Görüldüğü gibi KeyError alıyoruz. İlk elemanın içinde bulunmadığı için hata veriyor. Bu şekilde işlem yaparken ilk elemanı işleme aldığını pekiştirmiş olduk.

Peki diğer elemanlarla işlem yapmak istiyorsak? Burada .maps kullanıyoruz.

.maps ile ChainMap içindeki tüm maplerin listesini dönüyor. Böylece indeksleme yapıp işlem yapacağımız elemanımızı seçebiliyoruz.

parents

İlk içerdiği dışındaki tüm mapleri içeren yeni bir ChainMap döndürür. Bu aramadaki ilk map’i atlamak için kullanışlıdır.

Counter

Nesneleri saymak için kullanılan bir dictionary alt sınıfıdır.

Counter’lar string, map ve anahtar kelime argümanları alabilirler.

Değerleri çağırırken dictionary kullanımıyla aynı yöntem kullanılıyor. Counter içinde bulunmayan bir key denersek 0(sıfır) değeri bize dönüyor.

elements()

Counter içinde bulunan değerleri ve tekrar eden elemanlarını içeren iterator döndürür.

Çıktıda yy, ooo yazılmış bunun nedeni Counter içinde kaç tane y varsa onları art arda yazıyor.

most_common()

Counter içinde en çok tekrar eden elemanları döndürür. İçine yazacağım değer ile de ilk kaç tanesini döndüreceğini belirleyebiliriz.

substract()

İki Counter arasında çıkartma işlemi yapmamızı sağlıyor.

Deque

Stack ve Queue’nin genelleştirilmiş hali diyebiliriz. “Double- ended queue” kısaltılmışı olarak Deque denmiştir ve Thread Safe desteği vardır. En son etkinliği izlemek için kullanışlıdır.

Görüldüğü gibi Dequelere maksimum uzunluk tanımlayabiliyoruz. Bu sayede tutacağı veriyi kısıtlamış oluyoruz. Eğer maxlen tanımlamazsak None oluyor ve veri eklediğimiz zaman uzunluğu değişiyor fakat maxlen belirlenmiş bir Deque’e veri eklersek eklediğimiz yönün tersinden eski veri siliniyor.

extend()

Tek seferde birden çok veri eklemek için kullanılır.

rotate(n=1)

Deque sağa yada sola döndürür. Rotate içine verilen değer negatif ise sola pozitif ise sağa döndürme gerçekleşir.

Namedtuple

Bir tuple’ın her bir elemanına bir anlam verir ve bu sayede daha okunabilir, anlaşılır bir tuple sağlar. Tuple’ların kullanıldığı her yerde kullanılabilirler ve elemanlara indeksler yerine isimleri ile erişmemize olanak sağlar. Ayrıca csv veya sqlite3 modülleri tarafından döndürülen sonuç gruplarına alan adları atamak için özellikle kullanışlıdır.

_fields

Namedtuple içindeki alanları döndürür.

_make()

Yeni değerlerle yeni bir namedtuple oluşturmamızı sağlar.

_asdict()

Namedtuple’ı dictionary şeklinde çıktısını sağlar.

_replace()

Bir alana yeni değer atamamızı sağlar.

Bu yazımızla Python’da koleksiyonlara göz attık. Kodların tamamına github’dan ulaşabilirsiniz.

Faydalı olması dileğiyle. Başarılar.

--

--