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
| Operasyon | List | Dict | Set |
|---|---|---|---|
| Oluşturma | [1,2,3] | {'k':'v'} | {1,2,3} |
| Eleman ekleme | append / insert | assignment veya update | add |
| Çıkarma | remove / pop | del veya pop | discard / remove |
| Üyelik | in | in (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
- Python 3 — Veri Yapıları (Resmi Dokümantasyon) — temel tanımlar ve detaylı açıklamalar.
- Python Veri Tipleri: Temel Rehber ve Örnekler — Netbilio — pratik örnekler ve açıklamalar.
- Python Veri Tipleri | Rabisu Docs — ek örnekler ve açıklamalar.
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.