Dersler

View on GitHub

EEM-241 İleri Düzey Programlama

2024-2025 Güz Dönemi

Ders 7 - Koleksiyonlar ve Comprehension Yapıları

1. Koleksiyonları seçme

Tür Sıralı Değiştirilebilir Tekrarlı eleman Erişim
list Evet Evet Evet İndeks
tuple Evet Hayır Evet İndeks
set Hayır Evet Hayır Üyelik
dict Ekleme sırasını korur Evet Anahtarlar benzersiz Anahtar

2. Tuple (demet)

Tuple, değişmemesi gereken sıralı veriler için uygundur.

nokta = (3, 4)
print(type(nokta))
print(nokta[0], nokta[-1])
olcumler = (3, 4, 5, 6, 7, 8)
print(olcumler[1:4])
print(min(olcumler), max(olcumler), sum(olcumler))

Tuple değiştirilemez:

nokta = (3, 4)
# nokta[0] = 10  # TypeError

Tek elemanlı tuple için virgül gereklidir:

a = (1,)
b = (1)
print(type(a), type(b))

Paketleme ve açma

koordinat = 10, 20
x, y = koordinat
print(x, y)
ilk, *orta, son = (1, 2, 3, 4, 5)
print(ilk, orta, son)

Değişkenlerin yerini geçici değişken olmadan değiştirmek de tuple açmaya dayanır:

a, b = 1, 2
a, b = b, a

3. Set (küme)

Set benzersiz elemanları saklar ve üyelik/küme işlemleri için kullanılır.

sayilar = {1, 2, 3, 3, 3, 2}
print(sayilar)

Boş küme {} ile değil set() ile oluşturulur; {} boş sözlüktür.

bos_kume = set()
bos_sozluk = {}
print(type(bos_kume), type(bos_sozluk))
a = {1, 2, 3, 4, 5, 6}
b = {4, 5, 6, 7, 8, 9}

print(a & b)  # kesişim
print(a | b)  # birleşim
print(a - b)  # fark
print(a ^ b)  # simetrik fark

Liste içindeki tekrarları kaldırma:

sayilar = [1, 2, 2, 3, 3, 1, 5]
benzersiz = set(sayilar)
print(benzersiz)

Set sırasızdır; özgün sırayı korumak gereken durumlarda doğrudan list(set(...)) kullanılmamalıdır.

4. Dictionary (sözlük)

Sözlükte veriler anahtar: değer çiftleri olarak tutulur.

ogrenci = {
    "isim": "Ali",
    "numara": 123,
    "bolum": "EEM"
}

print(ogrenci["isim"])
ogrenci["ders"] = "Programlama"
ogrenci["not"] = 75

Olmayan anahtara [] ile erişmek hata verir. Varsayılan değer isteniyorsa get kullanılabilir.

print(ogrenci.get("sinif"))
print(ogrenci.get("sinif", "Bilgi yok"))
print(ogrenci.keys())
print(ogrenci.values())
print(ogrenci.items())

for anahtar, deger in ogrenci.items():
    print(f"{anahtar}: {deger}")

İç içe sözlük

aile = {
    "baba": {"isim": "Ali", "yas": 40},
    "anne": {"isim": "Ayşe", "yas": 35},
    "cocuk": {"isim": "Mehmet", "yas": 10}
}

print(aile["cocuk"]["isim"])

for bilgi in aile.values():
    print(bilgi["isim"])

Frekans tablosu

metin = "abcdeabddfaaabcbdbddeebdac"
harf_sayilari = {}

for harf in metin:
    if harf not in harf_sayilari:
        harf_sayilari[harf] = 1
    else:
        harf_sayilari[harf] += 1

print(harf_sayilari)

Aynı işlem get ile daha kısa yazılabilir:

harf_sayilari = {}

for harf in metin:
    harf_sayilari[harf] = harf_sayilari.get(harf, 0) + 1

5. List comprehension

Önce açık döngü:

kareler = []
for sayi in range(1, 11):
    kareler.append(sayi ** 2)

Aynı işlemin comprehension biçimi:

kareler = [sayi ** 2 for sayi in range(1, 11)]

Filtre ekleme:

cift_kareler = [sayi ** 2 for sayi in range(1, 11) if sayi % 2 == 0]
meyveler = ["Muz", "Elma", "Armut", "Karpuz", "Kiraz"]

uzun_isimler = [meyve.lower() for meyve in meyveler if len(meyve) > 4]
a_icerenler = [meyve for meyve in meyveler if "a" in meyve.lower()]

Okunabilirliği azalan çok katmanlı ifadelerde normal döngü tercih edilmelidir.

carpimlar = [i * j for i in range(1, 5) for j in range(1, 5)]

6. Set ve dictionary comprehension

benzersiz_kalanlar = {sayi % 5 for sayi in range(20)}
print(benzersiz_kalanlar)
sayilar_ve_kareleri = {sayi: sayi ** 2 for sayi in range(1, 10)}
print(sayilar_ve_kareleri)

7. Türlerin Boolean karşılığı, any ve all

Sıfır ve boş koleksiyonlar False; sıfır dışı sayılar ve boş olmayan koleksiyonlar genellikle True kabul edilir.

print(bool(0), bool(1), bool(-1))
print(bool([]), bool([0]))
print(bool(""), bool("0"))
sayilar = [1, 2, 1, 4, 2, 0, 1, 6]

print(all(sayi != 0 for sayi in sayilar))
print(any(sayi > 5 for sayi in sayilar))

Alıştırmalar

  1. İki dersin öğrenci numarası kümelerinden yalnızca iki derse de kayıtlı öğrencileri bulun.
  2. Bir metindeki kelimelerin frekans sözlüğünü oluşturun.
  3. Bir öğrenci sözlüğü listesinde notu 60’tan büyük öğrencilerin adlarını comprehension ile çıkarın.
  4. Bir matrisin satır toplamlarını list comprehension ile üretin.
  5. Tekrarlı bir listedeki elemanları ilk görülme sırasını koruyarak benzersizleştirin.