Python list -- Bir çırpıda listeler
Python list, yani liste, herhangi bir sayıda diğer objeleri içinde bulunduran bir sandık vazifesi görüyor. Diğer dillerdeki listelerden en önemli farkı ise, bir listede birden fazla tip öğenin yanyana bulunabilmesi. Diğer konteynır tarzı objelerden farkı ise, listeler mutable olması ve sıralı olması diyebilir. Diğer konteynırlar nedir derseniz, kümeler (set) ve sözlükler (dict) bunlara örnek olarak gösterilebilir.
Bir list oluşturmak için, köşeli parantezler arasında, virgüllerle ayrılmış ifadeler sıralarız;
Bu açık olarak Python list oluşturma şeklidir. Aynı zamanda hesaplanmış bir liste oluşturabilirsiniz, ki bunlara Python jargonunda "List Comprehension" derler. Yazımı da şöyledir;
İfade olarak geçerli herhangi bir Python ifadesi yazılabilir. Bu ifade sequnence ile belirtilen objenin her elemanı için hesaplanır ve sonuç listeye dahil edilir. Örneğin;
Yukarıdaki Python ifadesi bize [1 4 9 16 25]
listesini verir.
Ayrıca yerleşik (built-in) list tipini kullanarak da liste oluşturabilirsiniz;
|
Listem = list() # boş liste
|
|
Listem = list(sequence) # sequence içindeki elemanlardan oluşan liste
|
|
Listem = list(ifade for degisken in sequence) # Hesaplanan bir liste
|
Elemanlara Ulaşmak
Benzer objelerde yapabildiğiniz gibi, list objelerinde de Len(Listem) listedeki eleman sayısını, Listem[n] n'inci sıradaki elamanı, Listem[n:k] ise n'inci sıradaki elemandan, k'ıncı sıradaki elemana kadar olan elemanlardan oluşan listeyi döndürür.
Eğer index olarak negatif bir sayı girerseniz, Python o sayıya listenin
uzunluğunu ekler. Örneğin, 10 elemanlı bir listeye, Listem[-1]
girerseniz, -1 + 10 = 9
olduğundan 9. indexdeki elemana ulaşırsınız
ki, kendisi son eleman olur. (ilk eleman 0'ıncı indexde olduğundan.)
Eğer listede olmayan bir index girerseniz, Python size bir IndexError hatası verecektir. Ancak, dilimleme yöntemini kullanıyorsanız, başlangıç ve bitiş indexleri sadece sınır noktaları olduğundan, IndexError hatası vermez.
Liste dilimlerken, adımlama (slice stepping) da kullanabilirsiniz;
|
dilim = Liste[baslangic:bitis:adim]
|
|
dilim = Listem[::2] # ilk elemandan başlayarak her ikinci elemanı alır.
|
|
dilim = Listem[1::2] # ikinci elemandan başlayarak her ikinci elemanı alır.
|
Listeler'de Döngüler
For-in yapısı, liste elemanları üzerinde gezinmek için en basit yollardan biridir;
Eğer elemanların index'ine de ihtiyaç duyuyorsanız, enumerate()
sizin
en iyi dostunuz olabilir;
Eğer sadece indexlerle ilgileniyorsanız, len()
ve range()
kullanabilirsiniz;
Sık kullanılan liste işleriniz için, Python'un bazı yerleşik fonksiyonlarını kullanabilirsiniz. Mesela, eğer liste sadece sayılardan oluşuyorsa, sum fonksiyonu bu sayıların toplamını bulur.
|
toplam = sum(L)
|
|
toplam = sum(L, altoplam) # toplamı altoplama ekler...
|
|
ortalama = float(sum(L)) / len(L)
|
Eğer liste stringlerden oluştuyorsa, bunları join ile birleştirebilirsiniz;
Listeleri Değiştirmek
list belirli bir elemanı veya bir aralığı değiştirmenize imkan sağlar;
Bu tarz işlemler listeyi kendi üzerinde değiştirecektir. Eğer bir kopyasını almak isterseniz dilimleme ve list fonksiyonu kullanabilirsiniz;
Aynı zamanda listeye eklemeler de yapabilirsiniz. Sona tek bir eleman eklemek için append, başka bir listeyi eklemek için extend, belirli bir index'e yerleştirmek için insert fonksiyonları kullanılır.
Başka bir listeden elemanları belli bir noktaya eklemek isterseniz, dilimleme notasyonunu kullanabilirsiniz;
Aynı zamanda listeden eleman da silebilirsiniz. del ifadesi belli bir elemanı veya aralığı silerken, pop belirli bir elemanı siler ve sildiği elemanı döndürür. remove ise bir elemanı arar ve siler.
Son olarak, list tipi reverse metoduyla yerinde ters çevirilebilir;
Ters çevirmek oldukça hızlıdır. Dolayısıyla listenin başına ekleme çıkarmalar yapacaksanız önce ters çevirip, sonra işlemleri yapıp, tekrar ters çevirerek zaman kazanabilirsiniz, çünkü listenin sonuna ekleme yapmak, başına ekleme yapmaktan çok daha hızlıdır.
|
L.reverse()
|
|
# append/insert/pop/delete ile sondaki elemanları değiştirin
|
|
L.reserve() # listeyi eski haline döndürün.
|
Listelerde sıkça kullanılan işlemlerden biri, her elamanı bir fonksiyona sokmak, ve bu elemanı fonksiyonun dönüş değeriyle değiştirmektir.
|
for index, eleman in enumerate(L):
|
|
L[index] = fonksiyon(eleman)
|
|
|
|
yeni = []
|
|
for eleman in L:
|
|
yeni.append(fonksiyon(eleman))
|
Yukarıdaki kod map veya list comprehension kullanarak daha iyi bir şekilde yazılabilir.
Dümdüz fonksiyon çağırmanın gerekli olduğu zamanlarda map fonksiyonu daha verimlidir. Ancak, eğer biraz daha karmaşık bir şey yapıyorsanız, list comprehension daha verimli olabilir.
Daha önce de bahsedildiği gibi, eğer hem elemana hem indexe ihtiyacınız varsa, enumerate kullanın.
Listede arama
in operatörünü bir elemanın listede olup olmadığını anlamak için kullanırız.
İlk eşleşen elemanın indexini bulmak için index metodunu kullanın.
Tüm eşleşen elemanları bulmak için bir döngü kurup, index'e başlangış adresi verebilirsiniz;
|
i = -1
|
|
try:
|
|
while 1:
|
|
i = L.index(deger, i+1)
|
|
print i," hanesinde eşleşme var."
|
|
except ValueError:
|
|
pass
|
Eşleşen elemanları saymak için count metodunu kullanın.
En küçük ve en büyük değerleri bulmak için max ve min fonksiyonlarını kullanın.