Giriş

Python Veri Yapıları—listeler, sözlükler ve setler—sık kullanılan, yerleşik koleksiyon tipleridir. Her biri farklı gereksinimler için tasarlanmıştır: sıralı depolama, anahtar–değer eşleştirmesi ve benzersizlik/üye testi gibi. Aşağıda her yapının ne zaman tercih edileceği, pratik örnekler, dikkat edilmesi gereken noktalar ve basit performans ölçümleri yer alır. Daha fazla teknik detay için Python'ın resmi dokümantasyonuna bakabilirsiniz: Python Veri Yapıları (Tutorial) ve Yerleşik Türler — stdtypes.

Hızlı Karşılaştırma

Yapı Temel Özellik Tipik Kullanım
Liste (list) Sıralı, değiştirilebilir, yinelenen elemanlara izin verir Sıralama, indeksleme, kuyruğa/stack'e benzer işlemler
Sözlük (dict) Anahtar–değer eşleştirmesi; anahtar bazlı erişim Hızlı arama, yapılandırılmış veriler, lookup tabloları
Set (set) Sırasız, benzersiz elemanlar; küme işlemleri Üyelik testi, benzersizlik, küme mantığı (birleşim, kesişim)

Listeler — Ne zaman ve nasıl kullanılır?

Listeler sıralı koleksiyonlar için uygundur. Öğelere indeks ile hızlı erişim, sıralama ve dilimleme (slice) gibi işlemler yapılabilir. Aşağıda temel kullanım örnekleri bulunmaktadır.

numbers = [1, 2, 3, 4]
numbers.append(5)
numbers.insert(2, 99)
last = numbers.pop() # sondaki elemanı çıkarır
numbers[1] = 10
squares = [x*x for x in numbers]

Önemli noktalar:

  • Liste dilimleme ve comprehension'lar, kısa ve okunaklı veri dönüşümleri sağlar.
  • Liste yöntemleri (append, extend, insert, pop, remove, sort, reverse) sık kullanılır; detaylar için Python dokümantasyonundaki ilgili bölüme bakın: Listeler — Python dokümantasyonu.

Sözlükler — Anahtar/değer eşleştirmesi

Sözlükler (dict) anahtar–değer çiftlerini saklamak için kullanılır. Anahtarlar genellikle hash'lenebilir (değişmez) türlerdir; bu sayede anahtar bazlı erişim verimlidir.

person = {"ad": "Ayşe", "yaş": 30}
person["şehir"] = "İstanbul"
age = person.get("yaş") # anahtar yoksa None döner veya varsayılan verilir
for k, v in person.items():
print(k, v) # Python 3.9 ve sonrası: sözlük birleştirme
# merged = dict1 | dict2

Sözlüklerle ilgili dikkat edilmesi gerekenler:

  • Anahtar olarak kullanılan nesneler hashlenebilir olmalıdır (ör. str, int, tuple).
  • Sözlük görünümleri (keys(), values(), items()) gerçek kopya değil, dinamik görünüm sağlar; yine belgelere bakabilirsiniz: dict — stdtypes.

Setler — Benzersizlik ve küme işlemleri

Set, tekrarlı elemanları otomatik olarak çıkarır ve üyelik testleri ile küme işlemleri için uygundur.

unique = set([1, 2, 2, 3]) # -> {1, 2, 3}
unique.add(4)
unique.discard(2)
if 3 in unique:
print("3 var") # Küme işlemleri
a = {1,2,3}
b = {2,3,4}
union = a | b
intersection = a & b
difference = a - b

Set kullanırken:

  • Set elemanları hashlenebilir olmalıdır; bu nedenle list gibi değiştirilebilir türler doğrudan eklenemez (TypeError oluşur).
  • Setler sırasızdır; elemanların depolandığı sıra garantilenmez.

Performans karşılaştırması ve ölçüm

Genel kural olarak, anahtar veya üyelik aramaları söz konusu olduğunda sözlükler ve setler listeye göre daha uygundur. Listeler ise sıralı veri ve indeksleme gerektiren durumlar için uygundur. Bu davranışın detayları ve nedenleri Python belgelerinde yer almaktadır; daha fazla bilgi için bakınız: Python Veri Yapıları.

Aşağıda listede ve sette üyelik testini karşılaştırmak için basit bir timeit örneği var. Bu örneği kendi verinizle çalıştırarak farklı büyüklükler için karşılaştırma yapabilirsiniz.

import timeit setup = "lst = list(range(1000000)); s = set(lst)" stmt_list = "999999 in lst" stmt_set = "999999 in s" print(timeit.timeit(stmt=stmt_list, setup=setup, number=1000)) print(timeit.timeit(stmt=stmt_set, setup=setup, number=1000))

Bu kodu çalıştırdığınızda genelde set üzerinde yapılan üyelik testlerinin daha hızlı olduğunu görürsünüz; ancak mutlak süreler veri boyutuna, Python sürümüne ve donanımınıza bağlı olarak değişir. Kendi senaryonuz için mutlaka ölçüm yapın.

Pratik ipuçları ve kurallar

  • Eğer koleksiyonda aynı öğeden birden fazla olabilir ve sıra önemliyse list kullanın.
  • Eğer benzersizlik ve hızlı üyelik testi gerekiyorsa set daha uygundur.
  • Anahtar–değer erişimi gerekiyorsa dict tercih edin.
  • Tek satırda filtreleme veya dönüştürme için comprehension yapıları hem okunaklı hem etkilidir.
  • Büyük veri ve sık arama durumlarında kendi verinizi temsil eden benchmarklar hazırlayın; genel kurallar her zaman en iyi sonucu vermez.

Dönüşümler ve birlikte kullanım örnekleri

Koleksiyonlar arasında sık dönüşüm yapılır. Örnekler:

# Bir listeden benzersiz eleman sayısı uniq_count = len(set(my_list)) # Sözlüğün anahtarlarını listeye almak keys = list(my_dict) # İki listeden fark/ortak eleman bulma set_a = set(list_a) set_b = set(list_b) common = set_a & set_b

Yaygın hatalar ve dikkat edilmesi gerekenler

  • Set veya dict anahtarı olarak değiştirilebilir (mutable) nesneler kullanmaya çalışmak TypeError ile sonuçlanır. Bu durumda tuple veya frozenset gibi hashlenebilir karşılıklar kullanılabilir.
  • Setlerin sırasız olduğunu unutmayın; sıralama gerekiyorsa set -> list -> sort adımları gerekebilir.
  • Sözlüğün görünüm nesnelerine (keys(), items()) doğrudan referans verildiğinde, temel sözlük değişirse görünüm de güncellenir—buna dikkat edin.

Nasıl test etmelisiniz: kısa kontrol listesi

  • 1) Örneğinizi temsil eden gerçek veri örneğiyle test hazırlayın.
  • 2) timeit veya benzeri araçlarla tipik işlemleri ölçün.
  • 3) Okunabilirlik ve bakım kolaylığı performansla dengelenmelidir.
  • 4) Elde ettiğiniz sonuçları farklı Python sürümlerinde test edin (ör. 3.9, 3.12, 3.13 farkları olabilir).

Kaynaklar ve daha fazla okuma

Resmi dokümantasyon en güvenilir referanstır. Aşağıdaki kaynaklar makaledeki kavramların dayanağını sağlar:

Özet

Python Veri Yapıları arasında tercih yaparken amacınızı (sıra, benzersizlik, anahtar–değer eşleştirmesi) ve performans gereksinimlerinizi göz önünde bulundurun. Listeler sıralı veri için, sözlükler anahtar–değer eşlemeleri için ve setler benzersiz elemanlar ile küme işlemleri için uygundur. Kendi yükünüzü ölçmek her zaman en sağlıklı yaklaşımdır.