Python Veri Yapıları: Liste, Sözlük ve Set Örnekleri

Python programlamada veriyi uygun şekilde temsil etmek, kodun okunabilirliğini ve performansını doğrudan etkiler. Bu rehberde üç temel koleksiyon tipi—list (liste), dict (sözlük) ve set (küme)—için kısa tanımlar, pratik örnekler, performans karşılaştırmaları ve seçim için uygulanabilir bir kontrol listesi bulacaksınız. Tanımlar ve karşılaştırmalar için referanslar: Netbilio, Sadık Turan (dict), Sadık Turan (set) ve Harran Üniversitesi özet tablo.

Kısa Tanımlar

  • Liste (list): Sıralı ve değiştirilebilir koleksiyonlar. Aynı listede farklı veri tipleri barındırabilir ve eleman tekrarı mümkündür (Netbilio).
  • Sözlük (dict): Anahtar-değer çiftlerinden oluşan koleksiyon; anahtarlar benzersiz olmalıdır ve Python 3.7+ sürümlerinde eklenme sırasını korur. Anahtarlar hashlenebilir olmalıdır (Sadık Turan).
  • Set (set): Sırasız, tekrarsız eleman kümesi. Set verisi değiştirilebilir; ancak set içinde yer alan öğelerin hashlenebilir (dolayısıyla genellikle değişmez) olması gerekir (Sadık Turan).

1) Liste (list) — Özellikler ve Örnekler

Liste, en yaygın kullanılan koleksiyon tiplerinden biridir. Sıralıdır (index ile erişim) ve mutable — yani var olan listeyi değiştirebilirsiniz.

Oluşturma ve temel işlemler:
my_list = [1, 'iki', 3.0, True]
my_list.append(4) # sona ekleme
my_list.insert(1, 'yeni') # belirli index'e ekleme
print(my_list[0]) # indeks ile erişim
slice_ornek = my_list[1:3] # dilimleme

List comprehension örneği (tercih edilen, okunaklı yöntem):
squares = [x*x for x in range(10)]

Sort örnekleri:
sorted_list = sorted(my_list) # yeni bir liste döner
my_list.sort() # listeyi yerinde (in-place) sıralar

Kopyalama ve dikkat:
shallow_copy = my_list.copy() veya shallow_copy = my_list[:] ile yüzeysel kopya alırsınız. İç içe (nested) yapı varsa derin kopya için copy.deepcopy gerekir.

2) Sözlük (dict) — Özellikler ve Örnekler

Sözlükler anahtar-değer eşleştirmesi için kullanılır; belirli bir anahtara hızlı erişim gerektiren durumlarda idealdir.

Oluşturma ve erişim:
person = {'ad': 'Ayşe', 'yas': 30}
print(person['ad']) # 'Ayşe'
print(person.get('telefon', 'bilgi yok')) # KeyError yerine varsayılan döner

Güncelleme ve iterasyon:
person['meslek'] = 'mühendis' # yeni anahtar-ekleme
for key, value in person.items():
print(key, value)

Sözlük comprehension:
squares = {x: x*x for x in range(5)}

Dikkat: Anahtarlar benzersiz olmalıdır ve hashlenebilir olmalıdır (ör. string, sayı, tuple). Liste gibi mutable tipler anahtar olamaz. Daha fazla detay için bkz. Sadık Turan — Python Dictionary.

3) Set (set) — Özellikler ve Örnekler

Setler, tekrar eden öğeleri ortadan kaldırmak veya kümeler arası küme işlemleri yapmak için kullanışlıdır.

Oluşturma ve temel işlemler:
my_set = {1, 2, 3}
my_set.add(4)
my_set.remove(2) # öğeyi kaldırır (öğe yoksa hata verir)
my_set.discard(5) # öğe yoksa hata vermez

Küme işlemleri:
A = {1,2,3}
B = {3,4,5}
union = A.union(B) # {1,2,3,4,5}
inter = A.intersection(B) # {3}
diff = A.difference(B) # {1,2}

Tekrardan arındırma (deduplication):
my_list = [1,2,2,3,3,3]
unique = list(set(my_list)) # sıra korunmaz
# Sıra korunmuş dedup: unique_order_preserved = list(dict.fromkeys(my_list))

Set hakkında daha detaylı bilgi: Sadık Turan — Python Sets.

Performans ve Zaman Karmaşıklıkları (Özet Tablo)

İşlem Liste (list) Sözlük (dict) Set (set)
İndex ile erişim O(1) — (anahtar üzerinden erişim)
Eleman ekleme (sona) Amortize O(1) Ortalama O(1) Ortalama O(1)
Üyelik testi (in) O(n) Ortalama O(1) Ortalama O(1)
Silme (belirli değer) O(n) Ortalama O(1) Ortalama O(1)
İterasyon O(n) O(n) O(n)

Bu özet, genel davranışı gösterir; gerçek performans Python sürümüne, veri boyutuna ve işlem tipine göre değişebilir. Aşağıdaki kaynaklarda karşılaştırma tablosuna dair referanslar bulunabilir (Harran Üniversitesi, Netbilio).

Hangi Durumda Hangi Veri Yapısını Seçmeli? — Kısa Kontrol Listesi

  • Veri sıralıysa ve indeks ile sık erişilecekse → list.
  • Anahtar ile hızlı eşleme/lookup gerekiyorsa → dict.
  • Tekrarları kaldırmak ya da kümeler arası küme işlemleri yapmak istiyorsanız → set.
  • Hafıza kritikse ve veri çok büyükse, veri yapısının belleğe etkisini test edin; gerektiğinde iteratörler ve jeneratörler kullanın.

Pratik Örnek: Kullanıcı Verisini Temizleme ve Haritalama

Senaryo: Aynı e-posta adresine sahip kayıtlar olabilir. Önce tekrarı kaldırıp, sonra id'ye göre bir sözlük oluşturmak isteyebilirsiniz.

# Örnek akış (kısa):
raw_emails = ['a@x.com', 'b@x.com', 'a@x.com']
unique_emails = list(dict.fromkeys(raw_emails)) # sıra korunarak dedup users = [ {'id': 1, 'email': 'a@x.com'}, {'id': 2, 'email': 'b@x.com'}, ] user_by_id = {u['id']: u for u in users} # dict ile hızlı erişim

Bu örnekte dict hızlı anahtar erişimi, set veya dict.fromkeys ise tekrar kaldırmayı sağlar.

Nasıl Test Edersiniz?

Belirli bir kullanım için performans merak ediyorsanız timeit veya basit zaman ölçümleri yapın. Örnek:

import timeit
setup = "lst = list(range(1000))"
stmt = "999 in lst"
print(timeit.timeit(stmt, setup=setup, number=10000))

Aynı testi set ve dict için tekrar ederek karşılaştırabilirsiniz. Ancak sonuçlar veri büyüklüğüne ve Python sürümüne bağlı olacaktır.

Öneriler ve Uygulama İpuçları

  • Liste üzerinde iterasyon yaparken aynı listeyi değiştirmekten kaçının; bunun yerine yeni bir liste oluşturun.
  • Sözlük erişimlerinde dict.get() kullanmak KeyError riskini azaltır.
  • Tekrarları kaldırmak için set() hızlıdır; sıralamayı korumak istiyorsanız list(dict.fromkeys(...)) kullanın.
  • Performans kritik durumlarda küçük testler (timeit) ile doğrulayın.

Özet

  • Listeler sıralı ve değiştirilebilirdir; indeks erişimi ve sıralı tutma gerektiğinde uygundur (Netbilio).
  • Sözlükler anahtar-değer eşleştirmesi sağlar; anahtarlar benzersiz ve hashlenebilir olmalıdır (Sadık Turan).
  • Setler tekrarsız eleman kümesi sunar ve küme işlemleri için uygundur; öğelerin hashlenebilir olması gerekir (Sadık Turan).

Kaynaklar