Takip et

Python’da Koleksiyonlar: Verilerinizi Düzenlemenin Gücü

Veri depolama ve düzenleme, programlamanın temelini oluşturur.

Python’da Koleksiyonlar: Verilerinizi Düzenlemenin Gücü

Veri depolama ve düzenleme, programlamanın temelini oluşturur. Python’daki koleksiyonlar, farklı veri türlerini etkili bir şekilde yönetmenizi sağlayarak kodunuzu daha düzenli ve işlevsel hale getirir. Bu kapsamlı rehber, Listelerden Sözlüklere kadar Python’ın temel koleksiyon yapılarını adım adım tanıtacak ve gerçek dünya senaryolarıyla pekiştirecektir.

Neden Python Koleksiyonlarına İhtiyaç Duyarız? Veri Yönetiminin Temelleri Nelerdir?

Günlük hayatta birçok veriyi düzenli bir şekilde saklama ihtiyacı duyarız. Örneğin, bir alışveriş listesi, bir telefon rehberi, bir takvimdeki etkinlikler veya bir sınıftaki öğrencilerin notları. Bu tür verileri tek tek ele almak yerine, belirli bir düzende veya ilişkisel yapıda bir araya getirmek hem işimizi kolaylaştırır hem de daha verimli çalışmamızı sağlar. İşte programlama dünyasında bu ihtiyacı karşılamak için “koleksiyonlar” (collections) veya “veri yapıları” (data structures) devreye girer. Python, bu konuda geliştiricilere oldukça zengin ve kullanımı kolay araçlar sunar.

Peki, neden tek tek değişkenler yerine koleksiyonlara ihtiyaç duyarız? Bir düşünün, eğer bir okulda 500 öğrencinin adını saklamanız gerekseydi, 500 ayrı değişken tanımlamak ne kadar pratik olurdu? Veya bu öğrencilerin not ortalamalarını hesaplamak için her bir değişkeni tek tek mi işleyecektiniz? Elbette hayır. Koleksiyonlar, bu tür durumlarda bize büyük esneklik ve düzen sağlar. Aynı türden veya farklı türden birçok veriyi tek bir yapı altında toplama, bu verilere kolayca erişme, onları değiştirme, ekleme veya silme imkanı sunarlar. Bu sayede kodumuz daha okunabilir, sürdürülebilir ve performanslı hale gelir.

Python’da temel olarak dört ana koleksiyon türü bulunur: Listeler (Lists), Tuple’lar (Tuples), Kümeler (Sets) ve Sözlükler (Dictionaries). Her bir koleksiyon türü, kendine özgü özelliklere ve kullanım alanlarına sahiptir. Örneğin, bir alışveriş listesi genellikle değişebilir ve sıralı öğeler içerir; bu durumda bir liste kullanmak mantıklı olacaktır. Ancak bir şehrin koordinatları gibi değişmez ve sıralı bir veri çiftini saklamak istediğimizde tuple’lar daha uygun olabilir. Eğer bir grup içindeki benzersiz öğeleri bulmak istiyorsak kümeler işimize yarar. Son olarak, bir öğrencinin adı, soyadı, numarası gibi anahtar-değer ilişkisi olan verileri saklamak için sözlükler idealdir.

Bu koleksiyonların doğru bir şekilde anlaşılması ve ne zaman hangi koleksiyonu kullanacağınızı bilmek, Python programlama yeteneklerinizi bir üst seviyeye taşıyacaktır. Her birinin kendine özgü avantajları ve dezavantajları vardır ve doğru seçimi yapmak, uygulamanızın performansını ve kodunuzun kalitesini doğrudan etkiler. Bu yüzden, bu rehberde her bir koleksiyon türünü detaylıca inceleyerek, ne işe yaradıklarını, nasıl kullanıldıklarını ve gerçek dünya senaryolarında nasıl uygulanabileceklerini adım adım öğreneceğiz. Veri yönetiminin temel taşları olan bu koleksiyonları kavradığınızda, daha karmaşık programlama problemlerini çözmek için sağlam bir temel atmış olacaksınız.

Python Listeleriyle Tanışın: Esnek Dizilerin Gücü Nasıl Kullanılır?

Python’daki listeler (lists), belki de en sık kullanılan ve en çok yönlü koleksiyon türüdür. Sıralı (ordered), değiştirilebilir (mutable) ve yinelenen (duplicate) öğeler içerebilen bir veri yapısıdır. Bir listeyi, market alışveriş listenize benzetebilirsiniz; öğeleri ekleyebilir, çıkarabilir, sırasını değiştirebilir ve aynı üründen birden fazla ekleyebilirsiniz. Bu esneklik, listeleri birçok programlama senaryosu için vazgeçilmez kılar.

Bir liste oluşturmak oldukça basittir. Köşeli parantezler [] arasına virgülle ayırarak öğeleri yazmanız yeterlidir. Öğeler farklı veri tiplerinde olabilirler; sayılar, metinler, hatta başka listeler bile bir listenin öğesi olabilir. Örneğin, bir öğrencinin aldığı dersleri veya bir projenin aşamalarını bir liste içinde saklayabiliriz. İşte basit bir liste oluşturma örneği:


ogrenci_notlari = [85, 92, 78, 95, 88]
alisveris_listesi = ["Elma", "Süt", "Ekmek", "Peynir"]
karisik_liste = ["Merhaba", 123, True, 3.14]
  

Listelerdeki öğelere erişmek için indeks (index) adı verilen sayısal konumlarını kullanırız. Python’da indeksler 0’dan başlar. Yani bir listenin ilk öğesi 0. indekste, ikincisi 1. indekstedir. Ayrıca, listenin sonundan başlayarak öğelere erişmek için negatif indeksler de kullanabiliriz (-1 son öğeyi, -2 sondan bir önceki öğeyi temsil eder). Listelerin belirli bir bölümünü almak için ise dilimleme (slicing) yöntemini kullanırız. Bu, listenin belirli bir aralığındaki öğeleri yeni bir liste olarak döndürür.


meyveler = ["Elma", "Armut", "Kiraz", "Muz", "Çilek"]
print(meyveler[0])  # Çıktı: Elma
print(meyveler[2])  # Çıktı: Kiraz
print(meyveler[-1]) # Çıktı: Çilek

# Dilimleme örnekleri
print(meyveler[1:4]) # Çıktı: ['Armut', 'Kiraz', 'Muz'] (1. indeksten 4. indekse kadar, 4 dahil değil)
print(meyveler[:3])  # Çıktı: ['Elma', 'Armut', 'Kiraz'] (Baştan 3. indekse kadar)
print(meyveler[2:])  # Çıktı: ['Kiraz', 'Muz', 'Çilek'] (2. indeksten sona kadar)
  

Listelerin en güçlü özelliklerinden biri de değiştirilebilir (mutable) olmalarıdır. Bu, bir liste oluşturulduktan sonra öğelerini değiştirebileceğiniz, yeni öğeler ekleyebileceğiniz veya mevcut öğeleri silebileceğiniz anlamına gelir. Bir öğeyi değiştirmek için, o öğenin indeksini kullanarak yeni değeri atamanız yeterlidir. Öğeler eklemek için append() (listenin sonuna ekler), insert() (belirli bir indekse ekler) veya extend() (başka bir listenin öğelerini ekler) metodlarını kullanırız. Öğeleri silmek için ise remove() (belirli bir değeri siler), pop() (belirli bir indeksteki öğeyi siler ve döndürür) veya del anahtar kelimesini (belirli bir indeksteki veya dilimdeki öğeleri siler) kullanabiliriz.


gorevler = ["Rapor Yaz", "Toplantıya Katıl", "E-postaları Yanıtla"]
print(gorevler) # Çıktı: ['Rapor Yaz', 'Toplantıya Katıl', 'E-postaları Yanıtla']

# Bir öğeyi değiştirme
gorevler[0] = "Sunum Hazırla"
print(gorevler) # Çıktı: ['Sunum Hazırla', 'Toplantıya Katıl', 'E-postaları Yanıtla']

# Yeni öğe ekleme
gorevler.append("Müşteri Araması Yap")
print(gorevler) # Çıktı: ['Sunum Hazırla', 'Toplantıya Katıl', 'E-postaları Yanıtla', 'Müşteri Araması Yap']

gorevler.insert(1, "Proje Planını Güncelle")
print(gorevler) # Çıktı: ['Sunum Hazırla', 'Proje Planını Güncelle', 'Toplantıya Katıl', 'E-postaları Yanıtla', 'Müşteri Araması Yap']

# Öğeleri silme
gorevler.remove("Toplantıya Katıl")
print(gorevler) # Çıktı: ['Sunum Hazırla', 'Proje Planını Güncelle', 'E-postaları Yanıtla', 'Müşteri Araması Yap']

silinen_gorev = gorevler.pop(2) # 2. indeksteki öğeyi sil ve döndür
print(silinen_gorev) # Çıktı: E-postaları Yanıtla
print(gorevler) # Çıktı: ['Sunum Hazırla', 'Proje Planını Güncelle', 'Müşteri Araması Yap']

del gorevler[0]
print(gorevler) # Çıktı: ['Proje Planını Güncelle', 'Müşteri Araması Yap']
  

Listelerle yapabileceğiniz başka birçok işlem de vardır: Listenin uzunluğunu len() ile bulabilir, öğeleri sıralamak için sort() metodunu veya sorted() fonksiyonunu kullanabilir, bir öğenin listede olup olmadığını in operatörüyle kontrol edebilirsiniz. Listeler, Python’da veri yönetimi için temel bir araçtır ve esnekliği sayesinde çok çeşitli kullanım alanlarına sahiptir. Bir envanter listesi tutmaktan, kullanıcı girdilerini işlemeye kadar birçok senaryoda listelerden faydalanabilirsiniz.

Değişmez Veri Saklama: Python Tuple’ları Ne Zaman Tercih Edilmeli?

Python’da tuple’lar (demetler), listelere benzer şekilde sıralı (ordered) ve yinelenen (duplicate) öğeler içerebilen bir koleksiyon türüdür. Ancak tuple’ların en belirgin ve önemli farkı, değiştirilemez (immutable) olmalarıdır. Yani bir tuple oluşturulduktan sonra içindeki öğeler değiştirilemez, eklenemez veya silinemez. Bu özellik, tuple’ları belirli senaryolarda listelerden daha güvenli ve performanslı bir seçenek haline getirir.

Tuple’lar, parantez () içine virgülle ayrılmış öğeler yazılarak oluşturulur. Tek öğeli bir tuple oluştururken, öğeden sonra mutlaka bir virgül gelmesi gerektiğini unutmamak önemlidir, aksi takdirde Python bunu bir tuple olarak değil, parantez içindeki bir ifade olarak algılar. Örneğin, (5,) bir tuple iken, (5) sadece bir sayıdır.


koordinatlar = (10.5, 20.3)
renk_kodu = (255, 0, 128)
haftanin_gunleri = ("Pazartesi", "Salı", "Çarşamba")
tek_ogeli_tuple = ("Python",) # Tek öğeli tuple için virgül önemli
  

Listelerde olduğu gibi, tuple’lardaki öğelere indeksler ve dilimleme (slicing) kullanarak erişebiliriz. İndeksler yine 0’dan başlar ve negatif indeksler de kullanılabilir.


personel_bilgisi = ("Ayşe Yılmaz", "Yazılım Mühendisi", 55000)
print(personel_bilgisi[0]) # Çıktı: Ayşe Yılmaz
print(personel_bilgisi[1:]) # Çıktı: ('Yazılım Mühendisi', 55000)
  

Tuple’ların değiştirilemez olması, onların ne zaman kullanılacağına dair temel bir ipucu verir. Değişmesini istemediğiniz veya yanlışlıkla değiştirilmesini engellemek istediğiniz verileri saklamak için idealdirler. Örneğin, bir veritabanından gelen ve değiştirilmemesi gereken sabit yapıdaki kayıtlar, bir coğrafi konumun koordinatları, bir RGB renk kodu veya bir öğrencinin sabit kimlik bilgileri gibi veriler tuple olarak saklanabilir. Bu, veri bütünlüğünü sağlamanın etkili bir yoludur.


# Tuple'ın değiştirilemezlik özelliği
nokta = (10, 20)
# nokta[0] = 15 # Hata verir: TypeError: 'tuple' object does not support item assignment

# Ancak tuple içinde değiştirilebilir bir nesne varsa, o nesne değiştirilebilir
liste_iceren_tuple = ([1, 2], 3)
liste_iceren_tuple[0].append(4)
print(liste_iceren_tuple) # Çıktı: ([1, 2, 4], 3)
  

Tuple’lar aynı zamanda “tuple paketleme” (tuple packing) ve “tuple açma” (tuple unpacking) özellikleriyle de öne çıkar. Paketleme, birden fazla değeri tek bir tuple’da toplama işlemidir. Açma ise bir tuple’daki değerleri birden fazla değişkene atama işlemidir. Bu, özellikle fonksiyonlardan birden fazla değer döndürmek veya değişkenlere toplu atama yapmak için oldukça kullanışlıdır.


# Tuple paketleme
kisi = "Mehmet Can", 30, "İstanbul" # Parantez olmadan da tuple oluşturulabilir
print(kisi) # Çıktı: ('Mehmet Can', 30, 'İstanbul')

# Tuple açma
ad, yas, sehir = kisi
print(f"Ad: {ad}, Yaş: {yas}, Şehir: {sehir}")
# Çıktı: Ad: Mehmet Can, Yaş: 30, Şehir: İstanbul

# Fonksiyonlardan birden fazla değer döndürme
def get_user_info():
    return "Zeynep", "Demir", 28

kullanici_ad, kullanici_soyad, kullanici_yas = get_user_info()
print(f"{kullanici_ad} {kullanici_soyad} {kullanici_yas} yaşında.")
  

Tuple’lar, listelere göre daha az bellek tüketebilir ve bazı durumlarda daha hızlı çalışabilir. Ayrıca, sözlük anahtarı (dictionary key) olarak kullanılabilirler, çünkü anahtarların değiştirilemez olması gerekir (listeler sözlük anahtarı olamaz). Veri bütünlüğünün kritik olduğu, performansın önemli olduğu veya fonksiyonlardan sabit sayıda değer döndürmeniz gereken durumlarda tuple’lar mükemmel bir seçimdir. Listeler kadar esnek olmasalar da, doğru senaryoda kullanıldığında kodunuzun güvenilirliğini ve verimliliğini artırırlar.

Benzersiz Elemanların Adresi: Python Kümeleri (Set) Nasıl Çalışır?

Python’daki kümeler (sets), matematikteki küme kavramına benzer bir yapıya sahiptir. En temel özelliği, yalnızca benzersiz (unique) öğeler içermesidir; yani bir kümede aynı öğeden birden fazla bulunamaz. Ayrıca, kümeler sıralı (unordered) değildir ve indekslenemez (unindexed). Bu, küme öğelerine belirli bir sıra veya konum üzerinden erişemeyeceğiniz anlamına gelir. Kümeler, genellikle bir veri koleksiyonundan yinelenen öğeleri kaldırmak, iki veya daha fazla küme arasındaki ortak veya farklı öğeleri bulmak gibi işlemler için kullanılır.

Bir küme oluşturmak için süslü parantezler {} kullanırız. Ancak boş bir küme oluşturmak için {} kullanırsak bu bir sözlük oluşturur. Boş bir küme oluşturmak için set() fonksiyonunu kullanmalıyız. İçine liste veya tuple gibi yinelenebilir (iterable) bir nesne vererek de küme oluşturabiliriz.


sayilar = {1, 2, 3, 4, 5}
meyveler = {"Elma", "Armut", "Elma", "Muz"} # "Elma" tekrar etse de kümede bir kez yer alır
print(meyveler) # Çıktı: {'Elma', 'Armut', 'Muz'} (Sıra değişebilir)

bos_kume = set()
liste_ile_kume = set(["Kedi", "Köpek", "Kedi", "Kuş"])
print(liste_ile_kume) # Çıktı: {'Kedi', 'Köpek', 'Kuş'} (Sıra değişebilir)
  

Kümelerin değiştirilebilir (mutable) bir yapıya sahip olması, öğe ekleyip çıkarabileceğimiz anlamına gelir. Yeni bir öğe eklemek için add() metodunu kullanırız. Eğer eklemeye çalıştığımız öğe zaten kümede varsa, hiçbir değişiklik olmaz. Birden fazla öğeyi aynı anda eklemek için ise update() metodunu kullanırız; bu metod bir liste, tuple veya başka bir küme alabilir.


favori_renkler = {"Mavi", "Yeşil"}
favori_renkler.add("Kırmızı")
print(favori_renkler) # Çıktı: {'Mavi', 'Yeşil', 'Kırmızı'}

favori_renkler.add("Mavi") # Zaten var, küme değişmez
print(favori_renkler) # Çıktı: {'Mavi', 'Yeşil', 'Kırmızı'}

ek_renkler = ["Sarı", "Mor", "Mavi"]
favori_renkler.update(ek_renkler)
print(favori_renkler) # Çıktı: {'Mavi', 'Sarı', 'Yeşil', 'Mor', 'Kırmızı'} (Sıra değişebilir)
  

Kümeden öğe silmek için birkaç farklı metod bulunur: remove() ve discard(). Her ikisi de belirli bir öğeyi kümeden siler. Ancak remove() metodu, silmeye çalıştığınız öğe kümede yoksa bir hata (KeyError) fırlatırken, discard() metodu hiçbir şey yapmaz ve hata fırlatmaz. Bu, discard()‘ı daha güvenli bir seçenek yapar. Ayrıca pop() metodu, kümeden rastgele bir öğeyi siler ve döndürür (çünkü kümeler sıralı değildir, hangi öğenin silineceği garanti edilmez). Tüm öğeleri silmek için clear() metodunu kullanabiliriz.


sayilar_kumesi = {10, 20, 30, 40, 50}
sayilar_kumesi.remove(30)
print(sayilar_kumesi) # Çıktı: {10, 20, 40, 50}

sayilar_kumesi.discard(100) # Kümede yok, hata vermez
print(sayilar_kumesi) # Çıktı: {10, 20, 40, 50}

silinen_sayi = sayilar_kumesi.pop() # Rastgele bir öğe silinir
print(silinen_sayi) # Örneğin: 10
print(sayilar_kumesi) # Örneğin: {20, 40, 50}

sayilar_kumesi.clear()
print(sayilar_kumesi) # Çıktı: set()
  

Kümelerin en güçlü kullanım alanlarından biri de matematiksel küme operasyonlarıdır. İki küme arasındaki birleşim (union), kesişim (intersection), fark (difference) ve simetrik fark (symmetric difference) gibi işlemleri kolayca gerçekleştirebiliriz. Bu işlemler, veri analizi ve filtreleme senaryolarında oldukça işe yarar.


kume1 = {1, 2, 3, 4, 5}
kume2 = {4, 5, 6, 7, 8}

# Birleşim (Union): İki kümedeki tüm benzersiz öğeler
birlesim = kume1.union(kume2) # veya kume1 | kume2
print(birlesim) # Çıktı: {1, 2, 3, 4, 5, 6, 7, 8}

# Kesişim (Intersection): İki kümedeki ortak öğeler
kesisim = kume1.intersection(kume2) # veya kume1 & kume2
print(kesisim) # Çıktı: {4, 5}

# Fark (Difference): Birinci kümede olup ikinci kümede olmayan öğeler
fark = kume1.difference(kume2) # veya kume1 - kume2
print(fark) # Çıktı: {1, 2, 3}

# Simetrik Fark (Symmetric Difference): Her iki kümede de olmayan öğeler
simetrik_fark = kume1.symmetric_difference(kume2) # veya kume1 ^ kume2
print(simetrik_fark) # Çıktı: {1, 2, 3, 6, 7, 8}
  

Kümeler, büyük veri setlerinde yinelenen öğeleri hızlıca tespit etmek ve kaldırmak, üyelik testlerini (bir öğenin kümede olup olmadığını kontrol etmek) çok verimli bir şekilde yapmak için idealdir. Örneğin, bir web sitesinin ziyaretçi listesinden tekil ziyaretçileri bulmak veya iki farklı müşteri grubunun ortak ilgi alanlarını belirlemek gibi senaryolarda kümelerden faydalanabilirsiniz. Benzersizlik ve hızlı üyelik testi ihtiyaçlarınız olduğunda, Python kümeleri güçlü bir çözümdür.

Anahtar-Değer İlişkileri: Python Sözlükleri (Dictionary) ile Veri Eşleştirmek

Python’daki sözlükler (dictionaries), diğer koleksiyon türlerinden farklı bir mantıkla çalışır. Her öğenin bir anahtar (key) ve bir değer (value) çiftinden oluştuğu, anahtar-değer eşlemeleri şeklinde veri saklarlar. Bir sözlüğü, gerçek hayattaki bir sözlüğe veya telefon rehberine benzetebilirsiniz: Her kelimenin (anahtar) bir tanımı (değer) vardır ya da her kişinin adının (anahtar) bir telefon numarası (değer) vardır. Bu yapı, veriye anahtar üzerinden hızlı ve doğrudan erişim sağlar.

Sözlükler, süslü parantezler {} içine anahtar: değer çiftleri yazılarak oluşturulur. Anahtarlar benzersiz (unique) ve değiştirilemez (immutable) olmak zorundadır (yani sayılar, metinler veya tuple’lar anahtar olabilirken, listeler anahtar olamaz). Değerler ise herhangi bir veri türünde olabilir ve yinelenen değerler içerebilir.


kullanici_profili = {
    "ad": "Ali",
    "soyad": "Demir",
    "yas": 30,
    "email": "ali.demir@example.com"
}

urun_fiyatlari = {
    "Elma": 15.50,
    "Muz": 22.00,
    "Portakal": 18.75
}

bos_sozluk = {}
  

Sözlüklerdeki değerlere, anahtarlarını kullanarak erişiriz. Köşeli parantez [] içine anahtarı yazarak ilgili değeri alabiliriz. Eğer erişmeye çalıştığımız anahtar sözlükte yoksa, KeyError hatası alırsınız. Bu hatayı önlemek için get() metodunu kullanmak daha güvenlidir. get() metodu, anahtar bulunamazsa varsayılan bir değer döndürmenize olanak tanır (varsayılan belirtmezseniz None döndürür).


print(kullanici_profili["ad"]) # Çıktı: Ali
print(urun_fiyatlari.get("Muz")) # Çıktı: 22.0

# Anahtar bulunamazsa hata vermez, None döndürür
print(kullanici_profili.get("telefon")) # Çıktı: None

# Anahtar bulunamazsa varsayılan değer döndürür
print(kullanici_profili.get("telefon", "Bilgi Yok")) # Çıktı: Bilgi Yok
  

Sözlükler değiştirilebilir (mutable) olduğu için, var olan anahtarların değerlerini güncelleyebilir, yeni anahtar-değer çiftleri ekleyebilir veya mevcut çiftleri silebiliriz. Bir değeri güncellemek veya yeni bir çift eklemek için, anahtarı kullanarak yeni değeri atamanız yeterlidir. Eğer anahtar zaten varsa değeri güncellenir, yoksa yeni bir anahtar-değer çifti eklenir.


kullanici_profili["yas"] = 31 # Değeri güncelleme
print(kullanici_profili) # Çıktı: {'ad': 'Ali', 'soyad': 'Demir', 'yas': 31, 'email': 'ali.demir@example.com'}

kullanici_profili["sehir"] = "Ankara" # Yeni anahtar-değer çifti ekleme
print(kullanici_profili) # Çıktı: {'ad': 'Ali', 'soyad': 'Demir', 'yas': 31, 'email': 'ali.demir@example.com', 'sehir': 'Ankara'}
  

Sözlüklerden anahtar-değer çiftlerini silmek için del anahtar kelimesini veya pop() metodunu kullanabiliriz. pop() metodu, silinen anahtarın değerini döndürür. Tüm sözlüğü temizlemek için clear() metodunu kullanırız.


del kullanici_profili["email"]
print(kullanici_profili) # Çıktı: {'ad': 'Ali', 'soyad': 'Demir', 'yas': 31, 'sehir': 'Ankara'}

silinen_yas = kullanici_profili.pop("yas")
print(f"Silinen yaş: {silinen_yas}") # Çıktı: Silinen yaş: 31
print(kullanici_profili) # Çıktı: {'ad': 'Ali', 'soyad': 'Demir', 'sehir': 'Ankara'}

kullanici_profili.clear()
print(kullanici_profili) # Çıktı: {}
  

Sözlükler üzerinde döngü (iteration) yapmak için keys() (anahtarları döndürür), values() (değerleri döndürür) veya items() (anahtar-değer çiftlerini tuple olarak döndürür) metodlarını kullanabiliriz. Bu metodlar, sözlükteki verilere erişmenin ve onları işlemenin esnek yollarını sunar.


urun_fiyatlari = {
    "Elma": 15.50,
    "Muz": 22.00,
    "Portakal": 18.75
}

print("Ürünler:")
for urun in urun_fiyatlari.keys():
    print(urun)

print("\nFiyatlar:")
for fiyat in urun_fiyatlari.values():
    print(fiyat)

print("\nÜrün ve Fiyatları:")
for urun, fiyat in urun_fiyatlari.items():
    print(f"{urun}: {fiyat} TL")
  

Sözlükler, yapılandırılmış verileri depolamak, konfigürasyon ayarlarını yönetmek, JSON gibi veri formatlarını işlemek veya veritabanı kayıtlarını temsil etmek gibi birçok senaryoda vazgeçilmezdir. Anahtar-değer eşleşmesi sayesinde verilere çok hızlı erişim sağlarlar ve bu da onları büyük veri setleriyle çalışırken oldukça verimli kılar. Python programlamasında güçlü ve esnek bir araç olan sözlükleri ustaca kullanmak, kodunuzun kalitesini ve verimliliğini önemli ölçüde artıracaktır.

Koleksiyonları Etkili Kullanmak İçin İpuçları ve En İyi Uygulamalar Nelerdir?

Python’daki koleksiyonları (listeler, tuple’lar, kümeler, sözlükler) anlamak sadece başlangıçtır. Asıl marifet, doğru koleksiyonu doğru yerde ve en verimli şekilde kullanabilmektir. İşte koleksiyonları daha etkili kullanmanıza yardımcı olacak bazı ipuçları ve en iyi uygulamalar:

1. Doğru Koleksiyonu Seçmek:

  • Liste (List): Eğer verilerinizin sırasının önemli olduğu, öğeleri ekleyip çıkarmanız veya değiştirmeniz gereken, yinelenen öğeler içerebilen bir koleksiyona ihtiyacınız varsa liste kullanın. Örneğin, bir kullanıcının sepetindeki ürünler, bir görev listesi.
  • Tuple (Demet): Verilerinizin değişmez (immutable) olmasını istiyorsanız ve sırası önemliyse tuple kullanın. Özellikle bir fonksiyonun birden fazla değer döndürmesi gerektiğinde veya sözlük anahtarı olarak kullanıldığında faydalıdır. Örneğin, bir GPS koordinatı (enlem, boylam), bir tarih (yıl, ay, gün).
  • Küme (Set): Sadece benzersiz öğelerle çalışmanız gerektiğinde ve öğelerin sırasının önemi yoksa küme kullanın. Yinelenen öğeleri filtrelemek, iki koleksiyon arasındaki ortak veya farklı öğeleri bulmak için idealdir. Örneğin, bir web sitesini ziyaret eden tekil IP adresleri.
  • Sözlük (Dictionary): Anahtar-değer çiftleri şeklinde veri depolamanız gerektiğinde sözlük kullanın. Verilere anahtarları aracılığıyla hızlı erişim gerektiğinde çok verimlidir. Örneğin, kullanıcı profilleri, yapılandırma ayarları, ürün katalogları.

2. Liste Anlayışları (List Comprehensions) ve Sözlük Anlayışları (Dictionary Comprehensions):

Bu yapılar, mevcut bir koleksiyondan yeni bir koleksiyon oluşturmanın veya bir dizi üzerinde döngü yaparken elemanları filtrelemenin/dönüştürmenin kısa ve Pythonik bir yoludur. Kodunuzu daha okunabilir ve genellikle daha performanslı hale getirirler.


# Liste anlayışı örneği: Sadece çift sayıları filtrele ve karelerini al
sayilar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
cift_sayilarin_karesi = [x**2 for x in sayilar if x % 2 == 0]
print(cift_sayilarin_karesi) # Çıktı: [4, 16, 36, 64, 100]

# Sözlük anlayışı örneği: Bir listeden sözlük oluşturma
urun_kodlari = ["A101", "B202", "C303"]
urun_adlari = ["Laptop", "Mouse", "Klavye"]
urun_katalogu = {kod: ad for kod, ad in zip(urun_kodlari, urun_adlari)}
print(urun_katalogu) # Çıktı: {'A101': 'Laptop', 'B202': 'Mouse', 'C303': 'Klavye'}
  

3. Performans İpuçları:

  • Kümelerde Üyelik Testi: Bir öğenin bir koleksiyonda olup olmadığını kontrol etmek için (if item in collection:), kümeler listelere göre çok daha hızlıdır. Özellikle büyük koleksiyonlarda bu fark belirginleşir. Çünkü kümeler, öğeleri hızlı arama için optimize edilmiş bir şekilde saklar.
  • Listelerde Ekleme/Silme: Listenin sonuna öğe eklemek (append()) genellikle hızlıdır. Ancak listenin başına veya ortasına öğe eklemek/silmek (insert(), remove(), del), Python’ın diğer öğeleri kaydırması gerektiği için daha yavaş olabilir. Eğer sık sık listenin başından öğe ekleyip çıkarmanız gerekiyorsa, collections.deque gibi özel veri yapılarını düşünebilirsiniz.
  • Tuple’lar Listelerden Hafiftir: Tuple’lar değiştirilemez oldukları için listelere göre daha az bellek tüketebilir ve bazı durumlarda daha hızlı oluşturulabilir/işlenebilir.

4. İç İçe Koleksiyonlar:

Koleksiyonları birbirlerinin içine yerleştirerek daha karmaşık veri yapıları oluşturabilirsiniz. Örneğin, bir liste içinde sözlükler (bir öğrenci listesi, her öğrencinin bir sözlükle temsil edildiği), bir sözlük içinde listeler (bir kullanıcının favori ürünlerinin listesi) veya iç içe listeler (bir matris) gibi yapılar sıkça kullanılır.


# İç içe sözlükler ve listeler
ogrenci_listesi = [
    {"ad": "Ayşe", "soyad": "Yılmaz", "dersler": ["Matematik", "Fizik"]},
    {"ad": "Can", "soyad": "Kara", "dersler": ["Kimya", "Biyoloji", "Matematik"]}
]
print(ogrenci_listesi[0]["dersler"][0]) # Çıktı: Matematik
  

5. collections Modülü:

Python’ın standart kütüphanesindeki collections modülü, standart koleksiyonlara ek olarak özel koleksiyon türleri sunar. Bunlar, belirli veri yönetimi ihtiyaçları için optimize edilmiştir:

  • Counter: Bir koleksiyondaki öğelerin sayısını saymak için.
  • defaultdict: Sözlüğe olmayan bir anahtarla erişildiğinde hata yerine varsayılan bir değer döndürmek için.
  • namedtuple: Tuple’lara isimli alanlar ekleyerek daha okunabilir hale getirmek için.
  • deque: Listelere göre her iki uçtan da hızlı ekleme ve çıkarma işlemleri için (çift uçlu kuyruk).

from collections import Counter, defaultdict

# Counter örneği
kelimeler = ["elma", "armut", "elma", "muz", "armut", "elma"]
kelime_sayilari = Counter(kelimeler)
print(kelime_sayilari) # Çıktı: Counter({'elma': 3, 'armut': 2, 'muz': 1})

# defaultdict örneği
sifir_default_sozluk = defaultdict(int)
sifir_default_sozluk["a"] += 1
print(sifir_default_sozluk["b"]) # Çıktı: 0 (KeyError vermez)
  

Bu ipuçları ve en iyi uygulamalar, Python koleksiyonlarını sadece kullanmakla kalmayıp, onları daha bilinçli, verimli ve Pythonik bir şekilde kullanmanızı sağlayacaktır. Kodunuzu tasarlarken ve veri yapılarınızı seçerken bu prensipleri göz önünde bulundurmak, daha sağlam ve ölçeklenebilir uygulamalar geliştirmenize yardımcı olacaktır.

Sonuç: Python Koleksiyonlarıyla Veri Yönetiminde Uzmanlaşmak

Bu rehber boyunca, Python’ın temel koleksiyon türlerini – Listeler, Tuple’lar, Kümeler ve Sözlükler – detaylı bir şekilde inceledik. Her birinin kendine özgü özelliklerini, nasıl oluşturulduklarını, öğelerine nasıl erişildiğini ve üzerlerinde hangi işlemlerin yapılabileceğini öğrendik. Listelerin esnekliği ve değiştirilebilir yapısı, Tuple’ların veri bütünlüğünü sağlayan değiştirilemezliği, Kümelerin benzersiz öğe yönetimi ve hızlı üyelik testleri, ve Sözlüklerin anahtar-değer ilişkisiyle verimli veri eşleştirmesi gibi kritik noktaları derinlemesine ele aldık.

Python programlamasında verimli ve okunabilir kod yazmanın anahtarı, doğru koleksiyonu doğru yerde kullanabilmektir. Hangi koleksiyonun ne zaman tercih edilmesi gerektiğini anlamak, uygulamanızın performansını, sürdürülebilirliğini ve hata toleransını doğrudan etkiler. Gerçek dünya senaryolarıyla pekiştirdiğimiz bu bilgiler, sadece sentaksı öğrenmekle kalmayıp, bu yapıları pratik problemlere nasıl uygulayacağınız konusunda da size yol gösterdi. Liste anlayışları, sözlük anlayışları ve collections modülü gibi ileri düzey ipuçları ise kodunuzu daha Pythonik ve güçlü kılmak için ek araçlar sundu.

Unutmayın ki programlama sürekli bir öğrenme sürecidir. Bu koleksiyonları farklı senaryolarda deneyerek, kendi projelerinizde uygulayarak ve karşılaştığınız sorunlara çözüm arayarak bilginizi pekiştirebilirsiniz. Python’ın sunduğu bu zengin veri yapıları sayesinde, karmaşık veri yönetimi görevlerini daha basit ve etkili bir şekilde çözebilecek yetkinliğe sahip oldunuz. Şimdi sıra sizde, bu bilgileri pratiğe dökerek veri yönetiminde bir uzman olma yolunda ilerleyin!

Sıkça Sorulan Sorular (SSS)

1. Liste ve Tuple arasındaki temel fark nedir?
Liste (List) değiştirilebilir (mutable) bir koleksiyondur, yani oluşturulduktan sonra öğeleri eklenebilir, silinebilir veya değiştirilebilir. Köşeli parantez [] ile tanımlanır. Tuple (Demet) ise değiştirilemez (immutable) bir koleksiyondur; oluşturulduktan sonra öğeleri değiştirilemez. Parantez () ile tanımlanır. Tuple’lar veri bütünlüğünün önemli olduğu ve performansın kritik olduğu durumlarda tercih edilir.

2. Bir kümede (set) neden yinelenen öğeler bulunmaz?
Kümeler, matematikteki küme teorisinden esinlenerek tasarlanmıştır ve temel prensiplerinden biri her öğenin benzersiz olmasıdır. Bir küme, bir öğenin varlığını hızlı bir şekilde kontrol etmek için optimize edilmiştir ve bu optimizasyon, yinelenen öğelerin olmamasını gerektirir. Bir küme oluştururken veya bir öğe eklerken, eğer öğe zaten kümede varsa, işlem hiçbir etki yaratmaz ve küme aynı kalır.

3. Sözlük anahtarları neden değiştirilemez (immutable) olmalıdır?
Sözlükler, anahtarlar aracılığıyla değerlere hızlı erişim sağlamak için bir “hash” mekanizması kullanır. Anahtarların değiştirilemez olması, hash değerlerinin sabit kalmasını sağlar. Eğer bir anahtar değiştirilebilir olsaydı ve değeri değişseydi, hash değeri de değişir ve sözlüğün o anahtarla ilişkili değeri bulması imkansız hale gelirdi. Bu nedenle, sayılar, metinler ve tuple’lar gibi değiştirilemez veri tipleri sözlük anahtarı olarak kullanılabilirken, listeler gibi değiştirilebilir tipler kullanılamaz.

4. Hangi koleksiyon türünü ne zaman kullanmalıyım?
* Liste: Sıra önemliyse, öğeler değişebilir ve yinelenen öğeler içerecekse (örn: alışveriş sepeti, görev listesi).
* Tuple: Sıra önemliyse, öğelerin değişmez olması gerekiyorsa (örn: koordinatlar, RGB renk kodları).
* Küme: Yalnızca benzersiz öğelerle çalışılacaksa, sıranın önemi yoksa (örn: tekil ziyaretçiler, ortak ilgi alanları bulma).
* Sözlük: Anahtar-değer ilişkisiyle veri depolanacaksa, anahtar üzerinden hızlı erişim gerekiyorsa (örn: kullanıcı profilleri, ürün katalogları).

5. Büyük veri setleri için hangi koleksiyon daha performanslıdır?
Büyük veri setlerinde performans, yapılan işleme göre değişir:
* Üyelik testi (in operatörü): Kümeler ve sözlükler (anahtarlar için) listelere göre çok daha hızlıdır.
* Ekleme/Silme: Listelerin sonuna ekleme hızlıdır. Ortadan ekleme/silme yavaştır. Kümelerde ve sözlüklerde ekleme/silme genellikle verimlidir.
* Veri Bütünlüğü: Değişmezlik özelliği sayesinde Tuple’lar, verilerin yanlışlıkla değiştirilmesini engelleyerek daha güvenli bir yapı sunar.
Genel olarak, doğru koleksiyonu seçmek, performans açısından en kritik adımdır.

#Python #Koleksiyonlar #PythonDersleri #VeriYapıları #Programlama

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.