a List Comprehension | evieplus Academy | Bilgi Teknolojileri Platformu

List Comprehension

Liste Comprehension, mevcut bir listenin değerlerine göre yeni bir liste oluşturmak istediğinizde daha kısa bir sözdizimi sunar.

Örnek olarak bir meyve listesine bağlı olarak, yalnızca adında "a" harfi bulunan meyveleri içeren yeni bir liste istiyorsunuz.

Liste Comprehension olmadan, for döngüsü içinde bu koşulu kontrol eden bir if komutu ile yapabiliriz.

fruits = ["elma", "muz", "kiraz", "kivi", "mango"]
newlist = []

for x in fruits:
  if "a" in x:
    newlist.append(x)

print(newlist)

Liste Comprehension ile bunların hepsini yalnızca bir satır kodla yapabilirsiniz:

fruits = ["elma", "muz", "kiraz", "kivi", "mango"]

newlist = [x for x in fruits if "a" in x]

print(newlist)

Sentaks

newlist = [expression for item in iterable if condition == True]

Geri döndüğü değer yeni bir listedir ve eski listeye hiç bir değişiklik yapmamıştır.

Koşul

Koşul, yalnızca True olarak değerlendirilen öğeleri kabul eden bir filtre gibidir.

newlist = [x for x in fruits if x != "elma"]

x! = "elma" koşulu, "elma" dışındaki tüm öğeler için True döndürür ve yeni listenin "elma" dışındaki tüm meyveleri içermesini sağlar.

Koşul isteğe bağlıdır ve yazılmayıp atlanabilir:

newlist = [x for x in fruits]

Iterable

Iterable'ler, liste, tuple, küme vb. gibi yinelenebilir/tekrarlanabilir herhangi bir nesne olabilir. Önceki örnekteki listeyi tuple'a çevirirsek:

fruits = ("apple", "banana", "cherry", "kiwi", "mango")

newlist = [x for x in fruits if "a" in x]

print(newlist)

range()

Iterable oluşturmak için range fonksiyonunu kullanabilirsiniz:

newlist = [x for x in range(10)]

Aynı örneğe koşul eklersek

newlist = [x for x in range(10) if x < 5]

İfade (Expression)

Bir liste comprehension'da iki bölüm var diyebiliriz, Iterable kısmı ve ifade kısmı.

İfade (Expression), Iterable'ın geçerli öğesidir, ancak aynı zamanda, yeni listenin öğesinin farklı şekilde işlenip çıkan sonucudur.

Aşağıdaki örnekte yeni listedeki değerleri büyük harfe dönüştürmek için:

newlist = [x.upper() for x in fruits]

Sonucu istediğiniz gibi ayarlayabilirsiniz:

newlist = ['evieplus.academy' for x in fruits]

İfade, bir filtre gibi olmasada sonucu değiştirmenin bir yolu olarak koşulları da içerebilir:

Aşağıdaki örnekte "muz" yerine "portakal" döndürülür:

newlist = [x if x != "muz" else "portakal" for x in fruits]

Yukarıdaki örnekte ifade diyorki

"Muz değilse öğeyi dön, muz ise portakal dön".