? Okuma Hesaplanıyor... Okuma: %0
0

Her Veri Bir Liste Olmak Zorunda mı? (Python 6.Ders)

Resim

BÖLÜM 6 — Çeşitliliğin Doğuşu: Her Veri Bir Liste Olmak Zorunda mı?
Bu bölümün temel sorusu
Beşinci derste listelerle birden fazla veriyi bir arada tutmayı öğrendik. Peki bir veri hiç değişmemeli mi? Ya da bir veriye index numarasıyla değil, bir isimle mi ulaşmak istiyoruz? Liste her zaman doğru araç mı?

🎯 Bölümün Öğrenme Hedefleri
Bu dersin sonunda öğrenci;
  • listenin her problemi çözmediğini, hangi durumlarda yetersiz kaldığını,
  • demetlerin (tuple) "değiştirilemezlik" ihtiyacından nasıl doğduğunu,
  • sözlüklerin (dict) index yerine anahtar (key) kullanma fikrinin hangi problemi çözdüğünü,
  • kümelerin (set) tekrarsızlık garantisinin nereden geldiğini,
  • dört veri yapısı (liste, demet, sözlük, küme) arasında nasıl doğru seçim yapılacağını
açıklayabilecek duruma gelecektir.

📌 Geçen Derste Neler Öğrendik?
Beşinci derste listeleri ("[ ]") öğrendik. Birden fazla veriyi tek bir isimde, sırayla, index ile erişilebilir şekilde tutmayı. Ayrıca listelerin  değiştirilebilir (mutable)  olduğunu, yani tanımlandıktan sonra bile eleman eklenip çıkarılabildiğini gördük. Bu bölümde, tam olarak bu "değiştirilebilirlik" özelliğinin bazen istenmediği durumlardan yola çıkıyoruz.


6.1. Her Şey Bir Sorunla Başladı (Demetler İçin)
Diyelim ki bir noktanın koordinatlarını tutuyorsun: "(enlem, boylam)". Bu iki değer bir kere belirlendikten sonra  asla değişmemelidir . Bir şehrin koordinatları programın ortasında yanlışlıkla değiştirilirse, bu ciddi bir hataya yol açar.
Kod:
koordinat = [41.0082, 28.9784]   # liste kullanırsak...
koordinat[0] = 999                # bu değişikliği hiçbir şey engellemez!
Beşinci derste öğrendiğimiz gibi listeler değiştirilebilir bu genelde bir avantajdır, ama bazen bir  risktir . Bir veri, "bu asla değişmemeli" diye tasarlandıysa, dilin bize bunu garanti eden bir aracı olması gerekir. İşte bu ihtiyaçtan  demetler (tuple)  doğar.


6.2. Büyük Fikir: Değiştirilemezlik Bir Kısıtlama Değil, Bir Garantidir
Kod:
koordinat = (41.0082, 28.9784)
print(koordinat[0])   # 41.0082  -- okumak serbest

koordinat[0] = 999     # HATA! 'tuple' object does not support item assignment
Demetler köşeli parantez "[ ]" yerine normal parantez "( )" ile tanımlanır. Elemanlarına listedeki gibi index ile ulaşılır, ama  değiştirilemezler .
BİLGİ
🤔 Neden Bu "Kısıtlama" Aslında Bir Özellik?
Çünkü bir veriyi "değiştirilemez" olarak işaretlemek, kodu okuyan herkese (ve bir yıl sonraki sana) açık bir mesaj verir: "bu veri sabittir, güvenle kullanabilirsin, kimse arkadan değiştirmeyecek." Bu, tıpkı bir sözleşmenin mürekkeple değil kurşun kalemle değil, silinemez bir şekilde yazılması gibidir güven verir.
Ayrıca demetler, listelerden biraz daha hızlı çalışır çünkü Python "bu asla değişmeyecek" bilgisini kullanarak bellekte daha verimli bir yer ayırabilir.


6.3. Her Şey Bir Sorunla Başladı (Sözlükler İçin)
Şimdi farklı bir soruna bakalım. Bir öğrencinin bilgilerini tutmak istiyorsun: adı, yaşı, notu. Liste ile şöyle yapardık:
Kod:
ogrenci = ["Ahmet", 20, 85]
print(ogrenci[0])   # Ahmet
print(ogrenci[1])   # 20
print(ogrenci[2])   # 85
Burada ciddi bir sorun var: 'ogrenci[1]' in "yaş" olduğunu nereden bileceksin? Kod büyüdükçe, hangi index'in neyi temsil ettiğini ezbere bilmen gerekir bu hem hataya açık hem de okunması zor bir yaklaşımdır. İşte bu problem  "index yerine anlamlı bir isimle veriye ulaşma ihtiyacı"  yani  sözlükleri (dict)  doğurur.


6.4. Büyük Fikir: Sayı Yerine İsimle Erişim

Kod:
ogrenci = {
    "isim": "Ahmet",
    "yas": 20,
    "not": 85
}

print(ogrenci["isim"])   # Ahmet
print(ogrenci["yas"])    # 20
print(ogrenci["not"])    # 85
Sözlükler süslü parantez "{ }" ile tanımlanır ve her değer bir  anahtara (key)  bağlıdır. Artık "ogrenci[1]" diye ezbere bir index hatırlamak yerine, "ogrenci["yas"]" diyerek doğrudan ne istediğini söylüyorsun.
BİLGİ
💡 Büyük Fikir: Liste "bu kaçıncı sırada?" sorusuna göre organize olurken, sözlük "bu neyin karşılığı?" sorusuna göre organize olur. Bu, gerçek hayattaki bir sözlüğe (kelime kitabı) çok benzer, kelimeleri sayfa numarasıyla değil, kelimenin kendisiyle ararsın.

6.5. Sözlükte Değer Güncelleme ve Ekleme
Kod:
ogrenci = {"isim": "Ahmet", "yas": 20}

ogrenci["yas"] = 21              # var olan bir anahtarı güncelle
ogrenci["sehir"] = "İstanbul"    # yeni bir anahtar-değer ekle

print(ogrenci)
# {'isim': 'Ahmet', 'yas': 21, 'sehir': 'İstanbul'}

DERSTE
⚠️ Dikkat — Olmayan Bir Anahtara Erişmek:
Kod:
print(ogrenci["boy"])   # HATA! KeyError -- böyle bir anahtar yok

Bu hatadan kaçınmak için ".get()" metodunu kullanabilirsin anahtar yoksa hata vermez, "None" (ya da belirttiğin bir varsayılan değer) döndürür:
Kod:
print(ogrenci.get("boy"))          # None
print(ogrenci.get("boy", "bilinmiyor"))  # bilinmiyor

6.6. Sözlükte Döngü: "for" Bu Sefer Neyi Gezer?

Kaynak kod


Kod:
ogrenci = {"isim": "Ahmet", "yas": 20, "sehir": "İstanbul"}

for anahtar in ogrenci:
    print(anahtar)

Çıktı


isim
yas
sehir


DERSTE
🤔 Neden Sadece Anahtarlar Geldi?
Çünkü Python'da bir sözlük üzerinde doğrudan "for" döngüsü kurarsan, varsayılan olarak sadece  anahtarları  gezersin. Hem anahtar hem değeri istiyorsan ".items()" kullanman gerekir:

Kaynak kod


Kod:
for anahtar, deger in ogrenci.items():
    print(anahtar, ":", deger)

Çıktı


isim : Ahmet
yas : 20
sehir : İstanbul

Bu, beşinci dersteki "enumerate()" mantığına çok benzer orada index+eleman ikilisi alıyorduk, burada anahtar+değer ikilisi alıyoruz.

6.7. Her Şey Bir Sorunla Başladı (Kümeler İçin)
Son bir problem daha: Diyelim ki bir etkinliğe katılan kişilerin isimlerini tutuyorsun, ama biri yanlışlıkla aynı ismi iki kere kaydetmiş olabilir:
Kod:
katilimcilar = ["Ahmet", "Ayşe", "Ahmet", "Mehmet", "Ayşe"]

Burada "Ahmet" ve "Ayşe" tekrar ediyor oysa katılımcı listesi mantığen tekrar içermemeli. Listeyle bu tekrarları elle temizlemek gerekir. İşte bu problem —"tekrarsız veri tutma ihtiyacı"—  kümeleri (set)  doğurur.

Kod:
katilimcilar = {"Ahmet", "Ayşe", "Ahmet", "Mehmet", "Ayşe"}
print(katilimcilar)
# {'Ahmet', 'Ayşe', 'Mehmet'}  -- tekrarlar otomatik olarak silindi!

BİLGİ
💡 Büyük Fikir: Küme, matematikteki küme kavramından doğrudan ilham alır. Bir kümede her eleman  en fazla bir kere  bulunabilir. Python bu kuralı otomatik olarak uygular; siz tekrar ekleseniz bile küme bunu görmezden gelir.
DİKKAT
⚠️ Dikkat: Kümeler sözlük gibi "{ }" kullanır ama anahtar-değer çifti yoktur, sadece tekil değerler vardır. Ayrıca kümelerde  sıralama garantisi yoktur . Bir kümeyi yazdırdığında elemanların hangi sırayla çıkacağı garanti edilmez (listedeki gibi index ile de erişemezsin).

6.8. Dört Veri Yapısını Yan Yana Koyalım
Şimdiye kadar öğrendiğimiz dört veri yapısını, hangi soruna cevap verdikleri üzerinden karşılaştıralım:

Veri YapısıSözdizimiSıralı mı?Değiştirilebilir mi?Tekrar İçerebilir mi?Ne Zaman Kullanılır?
Liste"[ ]"EvetEvetEvetSıralı, değişebilir bir veri kümesi (öğrenci listesi)
Demet"()"EvetHayırEvetAsla değişmemesi gereken sabit veri (koordinat)
Sözlük"{ key: value }"Evet (3.7+)EvetAnahtar tekrar edemezİsimle erişilecek veri (bir kişinin bilgileri)
Küme"{ }"HayırEvetHayırTekrarsız, sırasız veri (benzersiz katılımcılar)

DİKKAT
🤔 Bu Tablo Neden Önemli?
Çünkü yeni başlayanların en sık düştüğü tuzaklardan biri, her durumda liste kullanmaya çalışmaktır. Oysa doğru veri yapısını seçmek, kodunu hem daha güvenli (demet: yanlışlıkla değiştirilemez) hem daha okunabilir (sözlük: index yerine isim) hem de daha doğru (küme: tekrarsızlık garantisi) hâle getirir.


⚠️ Kavram Yanılgıları
❌ Yanlış düşünce: "Demet, sadece parantez türü değişmiş bir listedir, aralarında pratik bir fark yoktur."
✅ Daha doğru düşünce: Demetin temel amacı değiştirilemezliktir (immutability). Bu, sadece bir sözdizimi tercihi değil, "bu veri asla değişmemeli" niyetini koda kodlamanın yoludur.

❌ Yanlış düşünce: "Sözlükte de listedeki gibi `ogrenci[0]` şeklinde index ile erişebilirim."
✅ Daha doğru düşünce: Sözlükte erişim index ile değil, anahtarla (`ogrenci["isim"]`) yapılır. Sayısal bir anahtar tanımlamadıysan (`{0: "Ahmet"}` gibi özel bir durum hariç), `ogrenci[0]` hataya yol açar.

❌ Yanlış düşünce: "Küme de sözlük gibidir çünkü ikisi de `{ }` kullanır."
✅ Daha doğru düşünce: Sözlükte anahtar-değer çiftleri vardır (`{"isim": "Ahmet"}`), kümede ise sadece tekil değerler vardır (`{"Ahmet", "Ayşe"}`). Sözdizimi benzer görünse de kavramsal olarak farklı problemleri çözerler.


👨‍🏫 Öğretmen Notu
Bu dersin en büyük pedagojik riski, dört farklı veri yapısını art arda vermenin öğrenciyi bunaltmasıdır. Bunu önlemenin yolu, her yapıyı  bir önceki yapının yetersiz kaldığı somut bir senaryo  ile açmaktır:
  1. Liste zaten biliniyor "peki ya değişmemesi gerekiyorsa?" sorusuyla demete geçilir.
  2. "Peki ya index yerine isimle erişmek istiyorsak?" sorusuyla sözlüğe geçilir.
  3. "Peki ya tekrarları otomatik engellemek istiyorsak?" sorusuyla kümeye geçilir.
  4. Ders sonunda mutlaka bir karşılaştırma tablosu verilmeli, öğrenci "hangisini ne zaman kullanacağım" sorusuna cevapsız kalmamalı.
Bu ders, aynı zamanda öğrenciye "Python'da her problem için birden fazla araç var, doğru aracı seçmek de programlamanın bir parçası" fikrini aşılamak için iyi bir fırsattır.


✍️ Uygulama Soruları
Soru 1: Bir dikdörtgenin genişlik ve yüksekliğini, değiştirilemez şekilde tutan bir demet oluşturunuz.

Soru 2: Bir kitabın adı, yazarı ve sayfa sayısını tutan bir sözlük oluştur ve yazarını yazdır.

Soru 3: Aşağıdaki liste içindeki tekrarlı renkleri bir küme kullanarak tekilleştir.
Kod:
renkler = ["kırmızı", "mavi", "kırmızı", "yeşil", "mavi"]

Soru 4: Aşağıdaki kod neden hata verir?
Kod:
koordinat = (10, 20)
koordinat[0] = 99

Soru 5: Bir sözlükteki tüm anahtar-değer çiftlerini "for" döngüsüyle "anahtar: değer" formatında yazdır.
Kod:
kisi = {"isim": "Elif", "sehir": "Ankara"}


📌 Şu Ana Kadar Neler Öğrendik?
  • Listenin her problemi çözmediği, veri yapısı seçiminin de programlamanın bir parçası olduğu
  • Demetlerin ("( )") değiştirilemezlik garantisi sunduğu ve bunun neden bir avantaj olduğu
  • Sözlüklerin ("{ key: value }") index yerine anlamlı bir isimle (anahtar) veriye erişmeyi sağladığı
  • ".get()" metodunun olmayan bir anahtara erişirken hatayı nasıl önlediği
  • ".items()" ile sözlükte hem anahtar hem değeri aynı anda gezebildiğimiz
  • Kümelerin ("{ }", anahtarsız) otomatik olarak tekrarları elediği ve sırasız olduğu
  • Dört veri yapısını (liste, demet, sözlük, küme) hangi kritere göre seçeceğimiz


📌 Bu Bölümden Çıkarılacak En Önemli Sonuç
Her veri yapısı bir formülle değil, listenin yetersiz kaldığı somut bir problemle doğdu:
  • değişmemesi gereken veri (demet),
  • isimle erişilmesi gereken veri (sözlük),
  • tekrarsız olması gereken veri (küme).
Doğru veri yapısını seçmek, sadece sözdizimi tercihi değil, kodunun niyetini açıkça ifade etmesidir. Bir demet gördüğünüzde "bu asla değişmeyecek" olduğunu ve bir küme gördüğünüzde "burada tekrar yok" olduğunu bilirsiniz.


📝 Bölümün Kısa Özeti
Liste her zaman yeterli değildir. Demetler ('( )') değiştirilemez veri için, sözlükler ('{ key: value }') anahtar üzerinden erişilen veri için, kümeler ('{ }', anahtarsız) tekrarsız veri için tasarlanmıştır. Sözlükte veriye `sozluk["anahtar"]` ile erişilir, `.get()` ile güvenli erişim sağlanır, `.items()` ile hem anahtar hem değer aynı anda gezilir. Kümeler otomatik olarak tekrarları eler ama sıralama garantisi vermez. Doğru veri yapısını seçmek, kodun hem güvenliğini hem okunabilirliğini artırır.


✍️ Uygulama Cevapları
Cevap 1:
Kod:
boyut = (10, 5)
print(boyut[0], boyut[1])
# Çıktı: 10 5

Cevap 2:
Kod:
kitap = {"ad": "Simyacı", "yazar": "Paulo Coelho", "sayfa": 208}
print(kitap["yazar"])
# Çıktı: Paulo Coelho

Cevap 3:
Kod:
renkler = ["kırmızı", "mavi", "kırmızı", "yeşil", "mavi"]
tekil_renkler = set(renkler)
print(tekil_renkler)
# Çıktı: {'kırmızı', 'mavi', 'yeşil'}

Cevap 4: Çünkü demetler değiştirilemezdir (immutable). Bir kere oluşturulduktan sonra elemanlarına yeni değer atanamaz. Bu, demetin tam olarak var olma amacıdır.

Cevap 5:
Kod:
kisi = {"isim": "Elif", "sehir": "Ankara"}
for anahtar, deger in kisi.items():
    print(anahtar, ":", deger)
# Çıktı:
# isim : Elif
# sehir : Ankara

Konuyu Dinle
Hazır. Konuyu dinlemek için Oynat'a basın.

Yazarımız Hasan hakkında: Adım Hasan, ama bir dönem MyBB kullananlar beni Yondaime nicki ile tanırdı. 2009 da başladı web maceram, MyBB, Wordpress, Matematik, Adalet, Bilgisayar Programcılığı, derken şimdide burada bir şeyler yapmaya çalışıyorum :)

user avatar


 

Yazıya herhangi bir yorum yapılmadı

[-]
Hızlı Cevap
Güvenlik Kodu:
Lütfen, resmin üzerindeki harf ve rakamlardan oluşan Güvenlik Kodunu, aşağıdaki metin kutusuna giriniz.
Güvenlik Kodu:
(Büyük/Küçük harf duyarsız)


 
Reklam
Reklam


Kategoriler


Yasal Uyarı
Bu internet sitesi içeriğinde yer alan tüm yazılar Gidenler.Me’ye ait olup, 5846 sayılı Fikir ve Sanat Eserleri Kanunu ve 5237 sayılı Türk Ceza Kanunu kapsamında korunmaktadır. Bu hakları ihlal eden kişiler, 5846 sayılı Fikir ve Sanat eserleri Kanunu ve 5237 sayılı Türk Ceza Kanununda yer alan hukuki ve cezai yaptırımlara tabi olurlar. Gidenler.Me, ilgili yasal işlem başlatma hakkına sahiptir. Gidenler.Me Blog'da yer alan tüm yazılar/makaleler bilgi edinme amacı ile sınırlı olup Gidenler.Me'den izin alınmaksızın değiştirilemez, çoğaltılamaz, yayımlanamaz, dağıtılamaz, umuma iletilemez, başka bir lisana çevrilemez.


Türkçe Çeviri: MyBB, Yazılım: MyBB, © 2002-2026 MyBB Group.
GM v3.0.0.8 Beta theme designed for MyBB