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