Nesne Tabanlı Programlama

5 - Listeler ve Demetler

Emre Can Yılmaz

Ondokuz Mayıs Üniversitesi

2024

Veri Yapıları: Bilgileri Düzenliyoruz!

  • Veri yapıları, verileri bilgisayarın belleğinde organize etmek için kullanılır.
  • Farklı veri tiplerini bir araya getirerek daha karmaşık bilgileri temsil etmemizi sağlarlar.

Listeler (Lists): Sıralı ve Değiştirilebilir Koleksiyonlar

  • Sıralı: Elemanların belirli bir sırası vardır ve bu sıra korunur.
  • Değiştirilebilir (Mutable): Elemanlar eklenebilir, silinebilir veya değiştirilebilir.
  • Tekrarlayan Elemanlara İzin Verir: Aynı elemanı birden fazla kez içerebilir.
  • Köşeli parantez ( [] ) ile tanımlanırlar.

Örnekler:

  • Alışveriş Listesi: alisveris_listesi = ["elma", "ekmek", "süt", "yumurta"]
  • Öğrenci Listesi: ogrenciler = ["Ahmet", "Mehmet", "Ayşe"]
  • Web Sitesi Menü Öğeleri: menü = ["Anasayfa", "Hakkımızda", "İletişim"]
sayilar = [1, 5, 3, 9, 7]
isimler = ["Ahmet", "Mehmet", "Ayşe"]
karisik_liste = [10, "Elma", True, 3.14]
bos_liste = []

Liste İndeksleme ve Dilimleme

  • İndeksleme: Listedeki belirli bir elemana indeks numarası ile erişebiliriz. İndeksler 0’dan başlar.
  • Dilimleme: Listenin belirli bir bölümünü almak için kullanılır.
sayilar = [1, 5, 3, 9, 7]

print(sayilar[0])  # Çıktı: 1 (İlk eleman)
print(sayilar[2])  # Çıktı: 3
print(sayilar[-1]) # Çıktı: 7 (Son eleman)

print(sayilar[1:4])  # Çıktı: [5, 3, 9] (1. indeksten 4. indekse kadar (4 hariç))
print(sayilar[:3])   # Çıktı: [1, 5, 3] (Baştan 3. indekse kadar (3 hariç))
print(sayilar[2:])   # Çıktı: [3, 9, 7] (2. indeksten sona kadar)

Listelerde in ve not in Operatörleri

  • in: Bir elemanın listede olup olmadığını kontrol eder.
  • not in: Bir elemanın listede olup olmadığını kontrol eder.
meyveler = ["elma", "armut", "muz"]

print("elma" in meyveler)   # Çıktı: True
print("kivi" in meyveler)   # Çıktı: False
print("üzüm" not in meyveler) # Çıktı: True

Liste Metotları: Listeler Üzerinde İşlemler

  • append(eleman): Listenin sonuna yeni bir eleman ekler.
sayilar = [1, 2, 3]
sayilar.append(4)
print(sayilar)  # Çıktı: [1, 2, 3, 4]

renkler = ["kırmızı", "yeşil"]
renkler.append("mavi")
print(renkler) # Çıktı: ['kırmızı', 'yeşil', 'mavi']
  • insert(indeks, eleman): Belirtilen indekse yeni bir eleman ekler.
isimler = ["Ahmet", "Mehmet"]
isimler.insert(1, "Ayşe")
print(isimler)  # Çıktı: ["Ahmet", "Ayşe", "Mehmet"]

sayilar = [1, 3, 4]
sayilar.insert(1, 2)
print(sayilar) # Çıktı: [1, 2, 3, 4]
  • remove(eleman): İlk bulunan elemanı listeden siler.
  • Not: Eğer eleman listede yoksa, ValueError hatası verir.
sayilar = [1, 2, 3, 2]
sayilar.remove(2)
print(sayilar)  # Çıktı: [1, 3, 2]

harfler = ["a", "b", "c", "a"]
harfler.remove("a")
print(harfler) # Çıktı: ['b', 'c', 'a']

# harfler.remove("d") # ValueError: list.remove(x): x not in list
  • pop(indeks): Belirtilen indeksteki elemanı listeden çıkarır ve döndürür.
  • İndeks belirtilmezse son elemanı çıkarır.
sayilar = [1, 2, 3]
silinen = sayilar.pop(1)
print(silinen)  # Çıktı: 2
print(sayilar)  # Çıktı: [1, 3]

meyveler = ["elma", "armut", "muz"]
son_meyve = meyveler.pop()
print(son_meyve) # Çıktı: muz
print(meyveler) # Çıktı: ['elma', 'armut']
  • index(eleman): Belirtilen elemanın ilk bulunduğu indeksi döndürür.
  • Not: Eğer eleman listede yoksa, ValueError hatası verir.
meyveler = ["elma", "armut", "muz"]
indeks = meyveler.index("armut")
print(indeks)  # Çıktı: 1

sayilar = [10, 20, 30, 40]
print(sayilar.index(30)) # Çıktı: 2

# print(sayilar.index(50)) # ValueError: 50 is not in list
  • count(eleman): Belirtilen elemanın listede kaç kez geçtiğini döndürür.
sayilar = [1, 2, 3, 2, 2, 4]
adet = sayilar.count(2)
print(adet)  # Çıktı: 3

harfler = ['a', 'b', 'c', 'd', 'a', 'a', 'b']
print(harfler.count('a')) # Çıktı: 3
  • sort(): Listeyi artan sırada sıralar.
  • Not: sort() metodu listeyi kalıcı olarak değiştirir.
  • reverse=True parametresi ile azalan sırada sıralanabilir.
sayilar = [3, 1, 4, 2]
sayilar.sort()
print(sayilar)  # Çıktı: [1, 2, 3, 4]

isimler = ["Zehra", "Ali", "Can"]
isimler.sort()
print(isimler) # Çıktı: ['Ali', 'Can', 'Zehra']

sayilar = [3, 1, 4, 2]
sayilar.sort(reverse=True)
print(sayilar) # Çıktı: [4, 3, 2, 1]
  • reverse(): Listenin elemanlarını tersine çevirir.
  • Not: reverse() metodu da listeyi kalıcı olarak değiştirir.
sayilar = [1, 2, 3, 4]
sayilar.reverse()
print(sayilar)  # Çıktı: [4, 3, 2, 1]

kelimeler = ["Python", "Java", "C++"]
kelimeler.reverse()
print(kelimeler) # Çıktı: ['C++', 'Java', 'Python']

Listelerle Döngüler: Tek Tek Elemanlara Erişme

sayilar = [1, 2, 3, 4, 5]

for sayi in sayilar:
    print(sayi * 2, end=" ")  # Çıktı: 2 4 6 8 10

isimler = ["Ali", "Veli", "Ayşe"]
for isim in isimler:
    print("Merhaba", isim)

Listelerin Kopyalanması: Dikkat!

  • Listeler değiştirilebilir (mutable) veri tipleridir.
  • Bir listeyi başka bir değişkene atarken, sadece referansı kopyalanır, elemanlar değil.
  • copy() metodu veya dilimleme ile listenin bir kopyasını oluşturabiliriz.
# Yanlış Kopyalama:
liste1 = [1, 2, 3]
liste2 = liste1

liste2.append(4)

print(liste1)  # Çıktı: [1, 2, 3, 4]
print(liste2)  # Çıktı: [1, 2, 3, 4]
# Doğru Kopyalama (copy() metodu):
liste1 = [1, 2, 3]
liste2 = liste1.copy()

liste2.append(4)

print(liste1)  # Çıktı: [1, 2, 3]
print(liste2)  # Çıktı: [1, 2, 3, 4]
# Doğru Kopyalama (dilimleme):
liste1 = [1, 2, 3]
liste2 = liste1[:]

liste2.append(4)

print(liste1)  # Çıktı: [1, 2, 3]
print(liste2)  # Çıktı: [1, 2, 3, 4]

join() Metodu: Liste Elemanlarını Birleştirme

  • join() metodu, bir string’i ayraç olarak kullanarak listedeki string elemanlarını birleştirir ve tek bir string döndürür.
kelimeler = ["Python", "eğlenceli", "bir", "dildir"]
cumle = " ".join(kelimeler)
print(cumle)  # Çıktı: Python eğlenceli bir dildir

harfler = ["a", "b", "c"]
yeni_metin = "-".join(harfler)
print(yeni_metin) # Çıktı: a-b-c

extend() Metodu: Listeleri Birleştirme

  • extend() metodu, bir listenin sonuna başka bir listenin elemanlarını ekler.
liste1 = [1, 2, 3]
liste2 = [4, 5, 6]

liste1.extend(liste2)
print(liste1)  # Çıktı: [1, 2, 3, 4, 5, 6]

meyveler1 = ["elma", "armut"]
meyveler2 = ["muz", "çilek"]
meyveler1.extend(meyveler2)
print(meyveler1) # Çıktı: ['elma', 'armut', 'muz', 'çilek']

Listeleri Toplama (+)

  • + operatörü ile iki listeyi birleştirebiliriz.
  • Bu işlem yeni bir liste oluşturur, orijinal listeler değişmez.
liste1 = [1, 2, 3]
liste2 = [4, 5, 6]

liste3 = liste1 + liste2
print(liste3)  # Çıktı: [1, 2, 3, 4, 5, 6]

harfler1 = ['a', 'b', 'c']
harfler2 = ['d', 'e', 'f']
print(harfler1 + harfler2) # Çıktı: ['a', 'b', 'c', 'd', 'e', 'f']

Dilim Değiştirme

  • Listelerin belirli bir bölümünü (dilimini) yeni değerlerle değiştirebiliriz.
sayilar = [10, 20, 30, 40, 50, 60]
sayilar[1:3] = [11, 61] # 2. ve 3. elemanları değiştir
print(sayilar) # Çıktı: [10, 11, 61, 40, 50, 60]

sayilar[1:6] = [12, 62] # 2. elemandan 6. elemana kadar olanları 2 yeni elemanla değiştir
print(sayilar) # Çıktı: [10, 12, 62]

Demetler (Tuples): Sıralı ve Değiştirilemez Koleksiyonlar

  • Sıralı: Elemanların belirli bir sırası vardır ve bu sıra korunur.
  • Değiştirilemez (Immutable): Elemanları eklenemez, silinemez veya değiştirilemez.
  • Parantez (()) ile tanımlanırlar.

Örnek:

  • Koordinatlar: koordinat = (10, 20)
  • RGB Renk Kodu: renk = (255, 0, 0) (Kırmızı)
gunler = ("Pazartesi", "Salı", "Çarşamba")

Demetlerde in ve not in Operatörleri

  • in: Bir elemanın demette olup olmadığını kontrol eder.
  • not in: Bir elemanın demette olup olmadığını kontrol eder.
gunler = ("Pazartesi", "Salı", "Çarşamba")

print("Salı" in gunler)  # Çıktı: True
print("Pazar" in gunler) # Çıktı: False
print("Cuma" not in gunler) # Çıktı: True

Demet İndeksleme ve Dilimleme

  • Listeler gibi indekslenir ve dilimlenirler.
koordinatlar = (10, 20, 30)

print(koordinatlar[0])  # Çıktı: 10
print(koordinatlar[1:]) # Çıktı: (20, 30)

harfler = ('a', 'b', 'c', 'd', 'e')
print(harfler[2:4]) # Çıktı: ('c', 'd')

Demet Metotları

  • Demetler değiştirilemez oldukları için sınırlı sayıda metoda sahiptirler.
  • count(eleman): Belirtilen elemanın demette kaç kez geçtiğini döndürür.

    renkler = ("kırmızı", "yeşil", "mavi", "kırmızı")
    adet = renkler.count("kırmızı")  # adet değişkeninin değeri 2 olur
    print(adet) # Çıktı: 2
  • index(eleman): Belirtilen elemanın demetteki ilk bulunduğu indeksi döndürür. Eğer eleman demette yoksa, ValueError hatası verir.

    renkler = ("kırmızı", "yeşil", "mavi")
    indeks = renkler.index("yeşil")  # indeks değişkeninin değeri 1 olur
    print(indeks) # Çıktı: 1
  • Ek Demet Metotları:
    • len(demet): Demetin uzunluğunu (eleman sayısını) döndürür.
    • max(demet): Demetin en büyük elemanını döndürür (elemanlar karşılaştırılabilir olmalıdır).
    • min(demet): Demetin en küçük elemanını döndürür (elemanlar karşılaştırılabilir olmalıdır).
sayilar = (3, 1, 4, 1, 5, 9, 2, 6, 5)
print(len(sayilar)) # Çıktı: 9
print(max(sayilar)) # Çıktı: 9
print(min(sayilar)) # Çıktı: 1

Demetlerin Avantajları

  • Değiştirilemezlik: Demetlerin değiştirilemez olması, verilerin yanlışlıkla değiştirilmesini önler ve program güvenliğini artırır.
  • Performans: Demetler, listelerden daha hızlı erişim sağlar, çünkü elemanları sabittir.
  • Anahtar Olarak Kullanım: Demetler, sözlüklerde anahtar olarak kullanılabilir, çünkü değiştirilemez olmaları gerekir.

Quiz

  1. Aşağıdaki kod bloğunun çıktısı nedir?
sayilar = [10, 20, 30, 40, 50]
print(sayilar[3])
  1. Aşağıdaki kod bloğunun çıktısı nedir?
harfler = ('a', 'b', 'c', 'd', 'e')
print(harfler[1:3])
  1. Aşağıdaki kod bloğunun çıktısı nedir?
sayilar = [1, 5, 3, 2, 4]
sayilar.sort(reverse=True)
print(sayilar[2])
  1. Aşağıdaki kod bloğunun çıktısı nedir?
meyveler = ["elma", "armut", "muz"]
meyveler.append("kivi")
meyveler.pop(1)
print(meyveler)
  1. Aşağıdaki kod bloğunun çıktısı nedir?
renkler = ("kırmızı", "yeşil", "mavi")
print("sarı" in renkler)
  1. Aşağıdaki kod bloğunun çıktısı nedir?
sayilar = (1, 5, 2, 4, 3)
print(len(sayilar))

Alıştırmalar

  1. Kullanıcıdan 5 isim alıp bir listeye ekleyen bir program yazın.
  2. Bir listedeki sayıların ortalamasını hesaplayan bir program yazın.
  3. Bir listedeki en küçük sayıyı bulan bir program yazın. (Döngü kullanarak)
  4. Bir listedeki tüm tek sayıları yeni bir listeye ekleyen bir program yazın.
  5. Kullanıcıdan 3 renk alıp bir demet oluşturun.
  6. Demette “kırmızı” renginin olup olmadığını kontrol eden bir program yazın.