
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.
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.
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.
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.
| İş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).
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 = ['[email protected]', '[email protected]', '[email protected]']
unique_emails = list(dict.fromkeys(raw_emails)) # sıra korunarak dedup
users = [
{'id': 1, 'email': '[email protected]'},
{'id': 2, 'email': '[email protected]'},
]
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.
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.
dict.get() kullanmak KeyError riskini azaltır.set() hızlıdır; sıralamayı korumak istiyorsanız list(dict.fromkeys(...)) kullanın.
Yorumlar