0
user Programlama Akademi
06-01-2025 3:36 PM
Python

Python 3'te Liste Kavramlarını Anlamak

Giriş

Liste üreteçleri, mevcut listelere dayalı olarak liste oluşturmanın özlü bir yolunu sunar. Liste üreteçleri kullanıldığında, dizeler ve demetler (tuple) dahil olmak üzere herhangi bir yinelenebilir (iterable) kullanılarak listeler oluşturulabilir.

Sözdizimsel olarak, liste üreteçleri, bir ifade içeren bir yinelenebilirin ardından bir for koşulundan oluşur. Bunu ek for veya if koşulları takip edebilir, bu nedenle for döngüleri ve koşullu ifadelerle tanışık olmak, liste üreteçlerini daha iyi anlamanıza yardımcı olacaktır.

Liste üreteçleri, listeler ve diğer sıralı veri türleri oluşturmak için alternatif bir sözdizimi sağlar. For döngüleri gibi diğer yineleme yöntemleri de liste oluşturmak için kullanılabilirken, liste üreteçleri programınızda kullanılan satır sayısını sınırlayabildikleri için tercih edilebilir.


Liste Üreteçleri

Python'da, liste üreteçleri şu şekilde yapılandırılır:

Bilgi: Bu eğitimdeki örnek kodları takip etmek için, yerel sisteminizde bir Python etkileşimli kabuğu açmak üzere python3 komutunu çalıştırın. Ardından, örnekleri >>> isteminin ardından ekleyerek kopyalayabilir, yapıştırabilir veya düzenleyebilirsiniz.

list_degiskeni = [x for x in iterable]

Bir liste veya başka bir yinelenebilir bir değişkene atanır. Yinelenebilir içindeki öğeleri temsil eden ek değişkenler, birfor koşulu etrafında oluşturulur. in anahtar kelimesi, yinelenebilir üzerinde yineleme yapmak için for döngülerinde olduğu gibi kullanılır.

Bir diziye dayalı bir liste oluşturan bir örneğe bakalım:

kopekbaligi_harfleri = [harf for harf in 'shark']
print(kopekbaligi_harfleri)

Burada, yeni liste kopekbaligi_harfleri değişkenine atanır ve harf, yinelenebilir dize 'shark' içinde yer alan öğeleri temsil etmek için kullanılır.

Yeni oluşturulan kopekbaligi_harfleri listemizin neye benzediğini doğrulamak için onu print() fonksiyonu ile çağırıyoruz ve şu çıktıyı alıyoruz:

Çıktı
['s', 'h', 'a', 'r', 'k']

Liste üreteci ile oluşturduğumuz liste, 'shark' dizesindeki öğelerden, yani her harf için bir dizeden oluşur.

Liste üreteçleri, for döngüleri olarak yeniden yazılabilir, ancak her for döngüsü bir liste üreteci olarak yeniden yazılamaz.

Yukarıda kopekbaligi_harfleri listesini oluşturan liste üretecimizi kullanarak, bunu bir for döngüsü olarak yeniden yazalım. Bu, liste üretecinin nasıl çalıştığını daha iyi anlamamıza yardımcı olabilir.

kopekbaligi_harfleri = []

for harf in 'shark':
    kopekbaligi_harfleri.append(harf)

print(kopekbaligi_harfleri)

Bir for döngüsüyle liste oluştururken, listeye atanan değişkenin boş bir listeyle başlatılması gerekir, kod bloğumuzun ilk satırında olduğu gibi. For döngüsü daha sonra 'shark' dizesindeki öğe üzerinde yineleme yapar, değişkeni harf olarak kullanır. For döngüsü içinde, dize içindeki her öğe list.append(x) yöntemiyle listeye eklenir.

Liste üretecini bir for döngüsü olarak yeniden yazmak bize aynı çıktıyı sağlar:

Çıktı
['s', 'h', 'a', 'r', 'k']

Liste üreteçleri for döngüleri olarak yeniden yazılabilir ve bazı for döngüleri de kodu daha özlü hale getirmek için liste üreteçleri olarak yeniden yazılabilir.


Koşullu İfadelerle Liste Üreteçleri Kullanma

Liste üreteçleri, yeni listeler oluştururken mevcut listeleri veya diğer sıralı veri türlerini değiştirmek için koşullu ifadelerden yararlanabilir.

Bir liste üretecinde kullanılan bir if ifadesine örnek bakalım:

balik_demet = ('balon balığı', 'palyaço balığı', 'yayın balığı', 'ahtapot')

balik_listesi = [balik for balik in balik_demet if balik != 'ahtapot']
print(balik_listesi)

Liste üreteci, balik_demet demetini, balik_listesi adlı yeni listenin temeli olarak kullanır. for ve in anahtar kelimeleri yukarıdaki bölümde olduğu gibi kullanılır ve şimdi bir if ifadesi eklenmiştir. if ifadesi, yalnızca 'ahtapot' dizesine eşit olmayan öğelerin eklenmesini söyler, böylece yeni liste demetteki 'ahtapot' ile eşleşmeyen öğeleri alır.

Bunu çalıştırdığımızda, balik_listesinin, 'ahtapot' dizesinin hariç tutulması dışında, balik_demet ile aynı dize öğelerini içerdiğini fark edeceğiz:

Çıktı
['balon balığı', 'palyaço balığı', 'yayın balığı']

Bu nedenle yeni listemiz, koşullu ifade tarafından hariç tutulan dize dışında, orijinal demetin her öğesine sahiptir.

Matematiksel operatörler, tam sayılar ve range() dizi türünü kullanan başka bir örnek oluşturacağız.

sayi_listesi = [x ** 2 for x in range(10) if x % 2 == 0]
print(sayi_listesi)

Oluşturulan liste olan sayi_listesi, 0-9 aralığındaki her öğenin değeri 2'ye bölünebilir ise öğenin karesiyle doldurulacaktır. Çıktı şu şekildedir:

Çıktı
[0, 4, 16, 36, 64]

Liste üretecinin ne yaptığını biraz daha anlamak için, yalnızca x for x in range(10) ifadesini çağırırsak neyin yazdırılacağını düşünelim. Küçük programımız ve çıktısı şu şekilde olacaktır:

sayi_listesi = [x for x in range(10)]
print(sayi_listesi)

Çıktı:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Şimdi koşullu ifadeyi ekleyelim:

sayi_listesi = [x for x in range(10) if x % 2 == 0]
print(sayi_listesi)
Çıktı
[0, 2, 4, 6, 8]

if ifadesi, son listede yalnızca 2'ye bölünebilen öğelerin yer almasını sağlamış ve tüm tek sayıları elemiştir.

Son olarak, her x'i karesine almak için operatörü ekleyebiliriz:

sayi_listesi = [x ** 2 for x in range(10) if x % 2 == 0]
print(sayi_listesi)

Yani önceki listede yer alan [0, 2, 4, 6, 8] sayıları şimdi karelerine alınmıştır:

Çıktı
[0, 4, 16, 36, 64]

Ayrıca, liste üreçlerinde iç içe if ifadelerini de kullanabilirsiniz:

sayi_listesi = [x for x in range(100) if x % 3 == 0 if x % 5 == 0]
print(sayi_listesi)

Burada, liste üreteci önce sayının 3'e bölünebilir olup olmadığını kontrol eder, ardından 5'e bölünebilir olup olmadığını kontrol eder. x her iki gereksinimi de karşılıyorsa, çıktı alınır ve çıktı şu şekildedir:

Çıktı
[0, 15, 30, 45, 60, 75, 90]

Koşullu if ifadeleri, mevcut bir dizideki hangi öğelerin yeni bir listenin oluşturulmasına dahil edileceğini kontrol etmek için kullanılabilir.


Liste Üreçlerinde İç İçe Döngüler

İç içe döngüler, programlarımızda birden fazla yineleme gerçekleştirmek için kullanılabilir.

Bu kez, mevcut bir iç içe for döngüsü yapısını gözden geçireceğiz ve liste üretecine doğru ilerleyeceğiz.

Kodumuz, iki liste üzerinde yineleme yapan ve bunlara dayalı olarak matematiksel işlemler gerçekleştiren yeni bir liste oluşturacaktır. İşte iç içe for döngüsü kod bloğumuz:

listem = []

for x in [20, 40, 60]:
    for y in [2, 4, 6]:
        listem.append(x * y)

print(listem)

Bu kodu çalıştırdığımızda şu çıktıyı alıyoruz:

Çıktı
[40, 80, 120, 80, 160, 240, 120, 240, 360]

Bu kod, her yinelemede ilk listedeki öğeleri ikinci listedeki öğelerle çarpar.

Bunu bir liste üretecine dönüştürmek için, kodun her satırını tek bir satıra yoğunlaştıracağız ve x * y işlemiyle başlayacağız. Bunu dış for döngüsü, ardından iç for döngüsü takip edecek. Yukarıdaki iç içe for döngüsü bloğuyla oluşturduğumuz listenin yeni listeyle eşleşip eşleşmediğini doğrulamak için liste üretecimizin altına bir print() ifadesi ekleyeceğiz:

listem = [x * y for x in [20, 40, 60] for y in [2, 4, 6]]
print(listem)
Çıktı
[40, 80, 120, 80, 160, 240, 120, 240, 360]

Liste üretecimiz iç içe for döngülerini tek bir satıra indirir ve hala listem değişkenine atanacak olan aynı listeyi oluşturur.

Liste üreteçleri, birkaç satır kodu tek bir satıra indirgememize olanak tanır ve listeleri özlü bir şekilde oluşturmamızı sağlar. Ancak, kodumuzun okunabilirliği her zaman öncelikli olmalıdır, bu nedenle liste üreteci satırı çok uzun veya karmaşık hale geldiğinde, döngüler halinde ayrılması daha iyi olabilir.


Sonuç

Liste üreteçleri, bir listeyi veya başka bir sırayı yeni bir listeye dönüştürmemizi sağlar. Bu görevi tamamlamak için özlü bir sözdizimi sunar ve kod satırlarımızı sınırlar.

Liste üreteçleri, matematiksel kümelenme gösterimine veya küme üretecine benzer ve bu nedenle matematiksel geçmişe sahip programcılar için özellikle sezgisel olabilir.

Liste üreteçleri, kodumuzu daha özlü hale getirebilir, ancak nihai kodun mümkün olduğunca okunabilir olmasını sağlamak önemlidir, bu nedenle çok uzun tek satırlı kodlardan kaçınılmalı ve kodun kullanıcı dostu olması sağlanmalıdır.


Lisa Tagliaferri tarafından yazılan Understanding List Comprehensions in Python 3 a Programming makalesinin düzenlenmiş çevirisi


Daha Fazla Oku:


Bu Makaleyi Paylaş

Yorumlar

yorum Yap