Python’da yalnızca belirli koşulları karşılayan mevcut bir listenin (dizinin) öğelerini çıkararak veya silerek veya değiştirme veya dönüştürme gerçekleştirerek yeni bir liste oluşturmak için liste kavramalarını kullanın.
Aşağıda örnek kodla birlikte burada açıklanmıştır.
- Liste anlama gösteriminin temel biçimi
- İşlemi listenin tüm öğelerine uygulayın
- Kriterleri karşılayan öğeleri listeden çıkarın ve silin
- Listenin koşullarını karşılayan öğeleri değiştirin veya dönüştürün
Dize listelerinin belirli örnekleri için aşağıdaki makaleye bakın.
Kriterleri karşılamayan öğeleri rastgele çıkarmak da mümkündür.
Listelerin farklı veri türlerini depolayabileceğini ve dizilerden kesinlikle farklı olduğunu unutmayın. Bellek boyutu ve bellek adresleri veya büyük verilerin sayısal olarak işlenmesini gerektiren işlemlerde dizileri işlemek istiyorsanız dizi (standart kitaplık) veya NumPy kullanın.
Aşağıdaki liste bir örnektir
l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
Liste anlama gösteriminin temel biçimi
Bir listeden yeni bir liste oluştururken, liste kavrayışlarını yazmak for döngülerinden daha kolaydır.
[expression for any variable name in iterable object if conditional expression]
Yinelenebilir bir nesnenin (liste veya demet gibi) koşullu ifadesini karşılayan ve yeni bir listenin öğesi haline gelen bir öğeye bir ifade uygulanır. “Eğer koşullu ifade” atlanabilir, bu durumda ifade tüm öğelere uygulanır.
İç içe liste anlama gösterimi de dahil olmak üzere daha fazla ayrıntı için aşağıdaki makaleye bakın.
İşlemi listenin tüm öğelerine uygulayın
Örneğin, bir listenin tüm öğelerine bazı işlemler uygulamak istiyorsanız, yukarıdaki liste anlama ifadesinde istenen işlemi açıklayın.
l_square = [i**2 for i in l]
print(l_square)
# [25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25]
l_str = [str(i) for i in l]
print(l_str)
# ['-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5']
Bu, sayı listeleri ve dize listeleri arasında dönüştürme yapmak için kullanılabilir.
Kriterleri karşılayan öğeleri listeden çıkarın ve silin
Öğe yalnızca koşullu bir ifade ile seçilecekse, bir ifade tarafından işlenmez, bu nedenle aşağıdaki formu alır.
[variable name for variable name in original list if conditional expression]
Yalnızca koşulu karşılayan öğelerin (koşullu ifadenin doğru olduğu öğeler) ayıklandığı yeni bir liste oluşturulur.
l_even = [i for i in l if i % 2 == 0]
print(l_even)
# [-4, -2, 0, 2, 4]
l_minus = [i for i in l if i < 0]
print(l_minus)
# [-5, -4, -3, -2, -1]
“Koşullu ifade”, “Koşullu ifade değilse” olarak ayarlanırsa, bir olumsuzlama olur ve yalnızca koşulu karşılamayan öğeler (koşullu ifadenin yanlış olduğu öğeler) seçilip çıkarılabilir. Başka bir deyişle, koşulu sağlayan öğelerin kaldırıldığı yeni bir liste oluşturulur.
l_odd = [i for i in l if not i % 2 == 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]
l_plus = [i for i in l if not i < 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]
Elbette, not kullanılmadan eşdeğer koşullu ifade belirtilerek aynı sonuç elde edilir.
l_odd = [i for i in l if i % 2 != 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]
l_plus = [i for i in l if i >= 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]
Koşullu ifade kısmı birden çok koşul olabilir. Negatif notlar da kullanılabilir.
l_minus_or_even = [i for i in l if (i < 0) or (i % 2 == 0)]
print(l_minus_or_even)
# [-5, -4, -3, -2, -1, 0, 2, 4]
l_minus_and_odd = [i for i in l if (i < 0) and not (i % 2 == 0)]
print(l_minus_and_odd)
# [-5, -3, -1]
Listenin koşullarını karşılayan öğeleri değiştirin veya dönüştürün
Yukarıdaki eleman çıkarma örneğinde, şartları sağlamayan elemanlar çıkarılmıştır.
Yalnızca koşulları sağlayan öğeler üzerinde ikame, dönüştürme vb. yapmak istiyorsanız, liste anlama gösteriminin ifade bölümüne üçlü operatörü uygulayın.
Python’da üçlü operatör aşağıdaki gibi yazılabilir.
True Value if Conditional Expression else False Value
a = 80
x = 100 if a > 50 else 0
print(x)
# 100
b = 30
y = 100 if b > 50 else 0
print(y)
# 0
Biraz karmaşık, ancak liste anlama notasyonu ve üçlü operatörlerin kombinasyonu aşağıdaki gibidir.
[True Value if Conditional Expression else False Value for any variable name in original list]
Parantez içine alınan kısım üçlü operatördür (gerçek kodda parantezler gerekli değildir).
[(True Value if Conditional Expression else False Value) for any variable name in original list]
Herhangi bir değişken adı true veya false değerleri için olduğu gibi yazılırsa, orijinal elemanın değeri olduğu gibi kullanılır. Bir ifade yazılırsa, o ifadenin işlenmesi uygulanır.
l_replace = [100 if i > 0 else i for i in l]
print(l_replace)
# [-5, -4, -3, -2, -1, 0, 100, 100, 100, 100, 100]
l_replace2 = [100 if i > 0 else 0 for i in l]
print(l_replace2)
# [0, 0, 0, 0, 0, 0, 100, 100, 100, 100, 100]
l_convert = [i * 10 if i % 2 == 0 else i for i in l]
print(l_convert)
# [-5, -40, -3, -20, -1, 0, 1, 20, 3, 40, 5]
l_convert2 = [i * 10 if i % 2 == 0 else i / 10 for i in l]
print(l_convert2)
# [-0.5, -40, -0.3, -20, -0.1, 0, 0.1, 20, 0.3, 40, 0.5]