Python Veri Yapıları: Listeler, Sözlükler ve Set için Pratik Snippetler

Python Veri Yapıları

Python Veri Yapıları: Listeler, Sözlükler ve Set için Pratik Snippetler

Python Veri Yapıları
5 dk okuma süresi
Bu rehber, Python listeleri, sözlükleri ve setleri için temel kavramlar, pratik kullanım örnekleri ve sık yapılan hatalardan kaçınma ipuçları sunar.
Python Veri Yapıları: Listeler, Sözlükler ve Set için Pratik Snippetler

Giriş

Python'da veriyi depolamak ve işlemek için en sık kullanılan yapıların başında list, dict (sözlük) ve set gelir. Bu makalede her bir veri yapısının kısa tanımını, hangi durumlarda tercih edileceğini, pratik kod snippetlerini ve gerçek dünya örneklerini bulacaksınız. Temel davranışlar ve resmi açıklamalar için Python'un resmi dokümantasyonuna bakabilirsiniz: Python Veri Yapıları — Resmi Dokümantasyon.

Kısa Karşılaştırma: Listeler, Sözlükler ve Setler

Aşağıda bu üç yapının kısa bir karşılaştırması yer almaktadır:

  • List: Sıralı ve değiştirilebilir bir koleksiyondur; aynı listede farklı tiplerde veri bulunabilir.
  • Dict (sözlük): Anahtar-değer çiftlerinden oluşan eşleme yapısıdır; anahtarlarla erişim sağlar. Anahtarların hashable (değiştirilemez/karma fonksiyonuna uygun) olması gerekir.
  • Set: Tekrarsız elemanlardan oluşur; küme işlemleri (birleşim, kesişim, fark) için uygundur ve same element yalnızca bir kez bulunur.

Bu yapıların ayrıntıları ve daha fazla örnek için resmi belgeye göz atabilirsiniz: https://docs.python.org/tr/3/tutorial/datastructures.html.


Listeler (list) — Temel Kullanım ve Pratik Snippetler

Listeler uygulamalarda en çok kullanılan koleksiyonlardandır. Aşağıda sık yapılan işlemler ve kısa örnekler yer alır.

Oluşturma ve eleman yönetimi

Basit liste tanımları ve temel operasyonlar:

numbers = [1, 2, 3, 4]
names = ['ali', 'ayşe', 'mehmet']
mixed = [1, 'a', 3.14, True]

Eleman ekleme/çıkarma:
numbers.append(5) # sona ekle
numbers.insert(0, 0) # başa ekle
numbers.remove(2) # değere göre sil
last = numbers.pop() # sondaki elemanı döndür ve sil

İndeksleme, dilimleme ve kopyalama

İndeksleme ve dilimleme örnekleri:
first = numbers[0]
sub = numbers[1:3] # 1 dahil, 3 hariç

Kopyalama örnekleri:
shallow = numbers.copy() # yüzeysel kopya
shallow2 = numbers[:] # yine yüzeysel kopya
İç içe yapılarda tam bir kopyalama gerekiyorsa copy.deepcopy kullanılması gerekebilir.

İterasyon ve enumerate

İterasyon örneği (indeks ile):

for i, val in enumerate(names):
  print(i, val)

List comprehension

List comprehension ile dönüşümler kısa ve okunabilir olur:

squares = [x*x for x in range(1, 6)] # [1, 4, 9, 16, 25]

İpucu

Bir koleksiyonu döngü sırasında değiştirmeniz gerekiyorsa, aynı koleksiyon üzerinde doğrudan değişiklik yapmak yerine bir kopya üzerinde iterasyon yapın (ör. for x in list(coll):). Bu yaklaşım beklenmeyen sonuçların önüne geçer.


Sözlükler (dict) — Temel Kullanım ve Pratik Snippetler

Sözlükler anahtar-değer eşlemeleri için idealdir. Anahtarlar hashable olmalıdır; ayrıntılar için resmi dokümantasyona bakın: Python Veri Yapıları.

Oluşturma ve erişim

Basit sözlük:

user = {'ad': 'Ali', 'yas': 30, 'sehir': 'İstanbul'}

Değer erişimi ve varsayılan dönüş:
isim = user['ad']
ulke = user.get('ulke', 'bilinmiyor')

Anahtarlar, değerler ve öğeler

Sık kullanılan görünümler:
keys = user.keys() # anahtar görünümü
values = user.values() # değer görünümü
items = user.items() # (anahtar, değer) çiftleri

Güncelleme ve comprehension

Sözlük güncelleme ve comprehension örneği:
user.update({'yas': 31}) # var olan anahtarı güncelle
squares_map = {x: x*x for x in range(6)} # {0:0, 1:1, ...}

Gruplama örneği

Öğeleri anahtar bazında gruplamak için setdefault kullanabilirsiniz:

words = ['elma', 'armut', 'uzum', 'armut']
groups = {}
for w in words:
  groups.setdefault(w, []).append(w)

Bu, aynı anahtara sahip öğeleri listeler halinde toplar.

Kısa not

Sözlükler büyük veri kümelerinde anahtar bazlı erişim kolaylığı sağlar; doğru anahtar seçimi ve ön kontrol (örn. in kullanımı veya get) iyi uygulamalardır.


Setler (set) — Temel Kullanım ve Pratik Snippetler

Setler tekrarı önlemek ve kümeler arası işlemler yapmak için uygundur. Set elemanları hashable olmalıdır.

Oluşturma ve temel işlemler

s = {1, 2, 3}
s.add(4)
s.discard(2) # eleman yoksa hata vermez
if 3 in s:
  print('var')

Küme işlemleri

a = {1, 2, 3}
b = {3, 4, 5}
union = a.union(b) # birleşim
inter = a.intersection(b) # kesişim
diff = a.difference(b) # fark

Tekrarları kaldırma ve sıra notu

Bir listeyi sete çevirip tekrar listeye dönüştürmek tekrarları kaldırır ancak orijinal sıra korunmaz:
items = [1, 2, 2, 3, 1]
unique = list(set(items)) # tekrarları kaldırır, sıra korunmaz

Eğer sıra korunması gerekiyorsa, sıra koruyan bir yöntem (ör. dict.fromkeys veya özel bir fonksiyon) tercih edin.


Gerçek Dünya Örnekleri

Aşağıda iki kısa, uygulanabilir örnek göreceksiniz.

1) Tekrarları koruyarak kaldırma (sıra korunur)

Modern Python sürümlerinde dict.fromkeys ile şu şekilde yapılabilir:

def unique_preserve_order(seq):
  return list(dict.fromkeys(seq))

Örnek:
vals = ['a', 'b', 'a', 'c']
unique_vals = unique_preserve_order(vals) # ['a', 'b', 'c']

2) Kelime frekansları (sık kullanılan analiz)

Kısa bir kelime sayaç fonksiyonu:

def count_words(text):
  counts = {}
  for w in text.split():
    counts[w] = counts.get(w, 0) + 1
  return counts

Bu yöntem, metin analizi veya ön işleme adımlarında hızlıca kullanılabilir.


Kısa İpuçları ve İyi Uygulamalar

  • Hangi veri yapısını kullandığınızı açıkça belirtin; kod okunabilirliği için isimlendirme önemlidir (örn. users_list, user_map).
  • List comprehension ile basit dönüştürmeler yapın; daha karmaşık mantık için normal döngüler veya yardımcı fonksiyonlar tercih edin.
  • Sözlük anahtarlarının ve set elemanlarının hashable olması gerektiğini unutmayın; genellikle str, int, tuple gibi türler uygundur.
  • Değişiklik yapmanız gerekirse, iterasyon için kopya almak güvenilir bir yaklaşımdır.
  • Daha fazla detay ve davranış farkları için her zaman resmi dokümantasyona başvurun: Python Veri Yapıları.

Hızlı Başvuru Tablosu

OperasyonListDictSet
Oluşturma[1,2,3]{'k':'v'}{1,2,3}
Eleman eklemeappend / insertassignment veya updateadd
Çıkarmaremove / popdel veya popdiscard / remove
Üyelikinin (anahtar için)in

Checklist: Hangi Durumda Hangi Veri Yapısı?

  • Sıralı liste, tekrar ihtiyacı varsa: list.
  • Anahtar-değer eşlemesi ve doğrudan anahtar erişimi gerekiyorsa: dict.
  • Tekrarların önlenmesi ve küme işlemleri gerekiyorsa: set.

Kaynaklar ve İleri Okuma

Resmi dokümantasyon, veri yapılarına dair davranış ve tanımlarda en güvenilir kaynaktır; uygulama gereksinimlerinize göre oraya başvurmanız faydalı olacaktır.