13: Listeler (Array)

Liste (list), bir başlık altında toplanmış değişkenler dizisidir. Pek çok farklı değişkenlerle, x0, x1, x2, …  gibi, bir program yazmak yerine, tek bir değişken tanımlayabilir ve böylece onun tüm üyelerine erişebiliriz x[0], x[1], x[2], vb. Daha da önemlisi, köşeli parantez içinde diğer ifade ve değişkenleri yerleştirebiliriz, x[i] and x[i+1], gibi. Bu şekilde, sadece küçük  bir kod parçası kullanarak büyük miktarda veri kümeleriyle başa çıkabiliriz.

Liste oluşturmanın yollarından biri, bir miktar değeri aralarına virgül koymak suretiyle köşeli parantez içine almaktır:

benimListem = ["Listedeki ilk değer", 1999, 4.5]
Bu şekilde uzunluğu (len) 3 olan benimListem adlı bir liste oluşturduk. Bu listenin her bir elemanının index adı verdiğimiz bir numarası vardır: ilk eleman index 0, bir sonraki index 1, şeklinde devam eder. Listeyi oluşturan bireysel değişkenlerin isimleri vardır.

«listeAdı»[«indeksNumarası»]

Bu örnekte, benimListem [0] karşılığı "Listedeki ilk değer" olan bir stringdir ve print(benimListem[2]) print komutu da 4.5 değerini yazdırır. Listedeki itemlerin değerlerini değiştirebilir ve tüm listeleri yazdırabilirsiniz:

Example
Bir listeyi güncelleyip yazdırmak.

Gördüğünüz gibi, sayılar[0] sanki bir değişkenmiş gibi işleme kondu: Bir değere karşılık geliyor ve bu değer değiştirilebiliyor.

Şimdi, aşağıda görüntülenen örneğn son aşamasını tahmin etmeye çalışın, sonra kodu çalıştırıp tahmininiz doğru çıkacak mı bakın.

Multiple Choice Exercise: Meta-Stuff
Aşağıdaki kod parçasının sonucu nedir?

stuff = [2, 25, 80, 12]
stuff[stuff[0]] = stuff[3]
print(stuff)
Doğru! Atama satırına bakın (2. satır). Sağ taraftaki stuff[3] elemanının değeri 12. Sol taraftaki stuff[0] ise 2, yani stuff[stuff[0]] değişkeni stuff[2] elemanına karşılık gelir. Bu elemanın değeri (80'den) 12'ye güncellendi.

Python'da liste "list"  adı verilen yapı diğer pek çok programlama dilinde array adıya anılır. Python'da array olarak anılan daha gelişmiş ve farklı  bir şey vardır.

Yaygın Bir Hata

Python'da kod yazarken olmayan bir indeksi sorarsanız hata alırsınız:

Example
Menzil dışı hatası.

Verdiğimiz örnekteki benimListem uzunluğu (len)  4 olan bir listedir ve ilk index 0 olduğu için, en yüksek indeks 3 olabilir. 4 ve üzeri bir indeks çağırmak böyle bir hatayla sonuçlanır.

Kullanışlı İşlemler

Bir Listenin Uzunluğu: len(«list»)

Listede bulanan birimlerin sayısını bulmak için len() fonksiyonu kullanılır. Aşağıdaki örnekte range yapısının nasıl kullanıldığına bakalım.

Example
Listenin uzunluğunu alıp onu liste boyunca tekrarlama yapmak için kullanma.

Farklı uzunluktuktaki listelerle çalışırken  len  fonksiyonunu sıkça kullanırız. Aşağıdaki örneklerde bu kullanımlara bakalım.

Coding Exercise: Ortadaki Maymun
Bir fonksiyon yazın, adı middle(L) olsun, argümanı olarak  L alsın  ve  L listesinin orta indeksinde yer alan elemanı döndürsün.  (Orta indeksinde bir eleman yer alabilmesi için L listesinin uzunluğu len tek sayıda olmalı.) Örneğin,  orta([8, 0, 100, 12, 1]) diye çağırdığımızda programın bize  100, elemanını döndürmesi gerekir, çünkü o eleman tam olarak liste uzunluğunun ortasındaki indeskte yer alır.
Enter testing statements like print(myfunction("test argument")) below.

Listeler ve Stringlere benzer mi?

Bu noktada, listeler üzerinde yaptığımız işlemlerin stringlerde de yapıldığını farketmiş olmalısınız: örneğin len() fonksiyonunu ikisinin de uzunluğunu bulmak için kullanırız, ve X[«index»] ile belli bir elementi çağırabiliriz. Listeler ve stringler gerçekten de benzerdirler: ikisi de Python'daki "dizi tipleri"dir. Aralarındaki en önemli fark ise stringlerin elementleri değiştirilemez.

Example
Bir stirng içindeki bir karakteri değiştirmeye çalışmak hataya neden oldu.

Bu sebeple listeler değişebilir mutable tipte iken stringler değişmez immutable tiptedir; 17. derste bununla ilgili biraz daha bilgi edineceğiz.

Birleştirme ve Oluşturma

str tipini gördüğümüz dersten hatırlayacağınız gibi iki stringi birleştirmek (concatenate) için +  kullanabiliyorduk. Aynı şeyi listelerle de yapabiliriz:

Example
Listeleri  + ile birleştime.

Benzer şekilde, çarpı * işareti de listelerin tekrarlanması ile genişlemesini sağlar. Bu, istenilen uzunlukta liste oluşturmaya yarar.

Example
* Kullanımı.

Şimdiki alıştırmayı çözmek için bu operatörlerden birinin yanı sıra for döngüsü kullanmanız gerekecek.

Coding Exercise: Bu çok doğal
İnput olarak pozitif   n  sayısını (integer) alıp,  ilk n doğal sayılarından oluşan  [1, 2, ...] bir listeyi döndüren doğalSayılar fonksiyonu yazın.
Enter testing statements like print(myfunction("test argument")) below.

Satır  Sonu: Negatif İndeksler

Bir listedeki en son elemeti çağırmak için kullanacağımız indeks:

«listeAdı»[-1]

Genel olarak, L[-k] dediğimizde listenin sonunda k .ıncı elementi çağırmış oluruz; Python bunu kendi içinde şöyle tercüme eder L[len(L)-k]. Bu kısa yol stringlerde de çalışır!

Coding Exercise: Palindrom
Tersten ve düzden okunuşu aynı olan kelimeye palindrom denir. Mesela

racecar

kabak, küçük, kelimeleri gibi bir palindromdur: ilk ve son harfleri aynıdır (r), baştan ve sondan ikinci harfleri de aynıdır  (a), vs. Bir fnksiyon yazın, adı  isPalindrom(S)  olsun ve input olarak  S  stringini alsın; eğer string palindrom ise  True , değilse  False çıktısını versin.

Enter testing statements like print(myfunction("test argument")) below.

max vesum

Daha önce gördüğümüz  max  fonksiyonu sayı isteleriyle de kullanılabilir: Listedeki en büyük sayıyı verir. Benzer şekilde  sum(L) fonksiyonu da  L listesindeki elementlerin toplam değerini verir.

Example

Coding Exercise: Ürün
L listesindeki elementlerin çarpımını veren  prod(L) adlı bir fonksiyon yazın.
Enter testing statements like print(myfunction("test argument")) below.

Listelerle döngüler

Bir listedeki tüm elementleri döndürmek (önceki alıştırmadaki gibi) çok sık kullanılan bir yöntemdir. Python'da bu tip işlemleri yapmak için kısa yollar bulunur, bunlara da genellikle"for all (hepsi için)" döngüsü veya  "for each (her biri için)" döngüsü adı verilir. Özellikle, L listesinde bu kod

for x in L:
  «döngü gövdesi bloğu»
şu işlemi yapar:  önce  x , L listesindeki ilk element olarak belirlenir ve gövde işleme konur; daha sonraki adımda x ,  L listesindeki ikinci element olarak belirlenir ve gövde işleme konur;  L. listesindeki tüm elementler için  bu şekilde devam eder.

Burada bir listedeki tüm elementlerin yazdırıldığı bir örnek görüyorsunuz:

Coding Exercise: for in
Yukarıdaki gibi prod(L) fonksiyonunu, ama bu kez başka bir döngü ile tanımlayın.
Enter testing statements like print(myfunction("test argument")) below.

"For all" döngüleri stirnglerle de kullanılır: şunu deneyinfor harf in "selam".

Bravo! Artık sonraki derse geçebilirsiniz, veya aşağıdaki bonus alıştırmaları da yapın.


Short Answer Exercise: Gizem Fonksiyonu
gizem(x) fonksiyonunun sonsuz döngüye girmesine sebep olan  x hangi değere sahiptir?

def gizem(x):
a = [0, 4, 0, 3, 2]
while x > 0:
x = a[x]
return "Tamamdır"
Correct!

Scramble Exercise: à la Mode
Listedeki mode en sık geçen elementtir (en fazla sayıda görülen element). Aşağıdaki programı düzeltin, böylece  mode(L) fonksiyonun 0-9 arası sayıları içeren L  listesinin modunu doğru bulabilsin. (Testlerde, en yüksek sıklığa sahip iki sayı çıkmıyor.)
  • if frequency[i]==max(frequency):
  • for i in L:
  • return i
  • def mode(L):
  • frequency = [0]*10
  • frequency[i] = frequency[i] + 1
  • for i in range(0, 10):