Python List Comprehension (Liste kavrama)

Bu makalede python’da daha kısa ve daha hızlı kod yazmamıza imkan veren List Comprehension konusundan bahsedeceğiz. Python’da list comprehension, bir liste oluşturmak için kullanılan kısa ve okunaklı bir yöntemdir. List comprehension, for döngüsüne benzer bir sözdizimine sahiptir, ancak daha kısa ve daha hızlıdır. Örneğin, bir sayı dizisinden yalnızca çift sayıları seçmek istediğinizi varsayalım. Bunun için önce List Comprehension kullanmadan yazalım sonra list comprehension yapısını kullanarak aradaki farkı iyice anlayalım. sayilarim = [1, 2, 3, 4, 5, 6, 7, 8] ciftSayilar = [] for sayi in sayilarim: if sayi % 2 == 0: ciftSayilar.append(sayi) print(ciftSayilar) Bu kod, sayilarim listesindeki çift sayıları seçer ve ciftSayilar listesine ekler. Şimdi bu kod bloğunu list comprehension ile  yazalım sayilarim=[1,2,3,4,5,6,7,8] ciftSayilar=[i for i in sayilarim if i%2==0] print(ciftSayilar) Burada, sayilarim adlı bir liste tanımlıyoruz ve ardından ciftSayilar adlı yeni bir liste oluşturuyoruz. Yeni liste, sayilarim listesindeki tüm çift sayıları içerir. Kodun çıktısı şu şekilde olacaktır: Bu […]

Python List Comprehension (Liste kavrama)

Bu makalede python’da daha kısa ve daha hızlı kod yazmamıza imkan veren List Comprehension konusundan bahsedeceğiz.

Python’da list comprehension, bir liste oluşturmak için kullanılan kısa ve okunaklı bir yöntemdir. List comprehension, for döngüsüne benzer bir sözdizimine sahiptir, ancak daha kısa ve daha hızlıdır.

Örneğin, bir sayı dizisinden yalnızca çift sayıları seçmek istediğinizi varsayalım.
Bunun için önce List Comprehension kullanmadan yazalım sonra list comprehension yapısını kullanarak aradaki farkı iyice anlayalım.

sayilarim = [1, 2, 3, 4, 5, 6, 7, 8]
ciftSayilar = []
for sayi in sayilarim:
    if sayi % 2 == 0:
        ciftSayilar.append(sayi)
print(ciftSayilar)

Bu kod, sayilarim listesindeki çift sayıları seçer ve ciftSayilar listesine ekler. Şimdi bu kod bloğunu list comprehension ile  yazalım

sayilarim=[1,2,3,4,5,6,7,8]

ciftSayilar=[i for i in sayilarim if i%2==0]
print(ciftSayilar)

Burada, sayilarim adlı bir liste tanımlıyoruz ve ardından ciftSayilar adlı yeni bir liste oluşturuyoruz. Yeni liste, sayilarim listesindeki tüm çift sayıları içerir. Kodun çıktısı şu şekilde olacaktır:

Bu kodda, [i for i in sayilarim if i % 2 == 0] ifadesi list comprehension’ı temsil eder. Burada, i değişkeni sayilarim listesindeki her bir öğeyi temsil eder ve if i % 2 == 0 koşulu sadece çift sayıların seçilmesini sağlar.

Yani, list comprehension yapısında önce for döngüsü, ardından bir veya daha fazla if ifadesi yer alır. Yani, [expression for variable in iterable if condition] şeklinde bir yapısı vardır. Bu, expression değişkenini iterable içindeki her bir variable değeri için değerlendirir ve sadece condition ifadesi doğru olduğunda yeni bir öğe oluşturur

List comprehension yapısında, if ifadesi for döngüsünden önce veya sonra yer alabilir. Yani, [expression if condition else expression2 for variable in iterable] şeklinde bir yapı da kullanılabilir. Bu, condition ifadesi doğruysa expression ifadesi değerlendirilir ve yeni bir öğe oluşturulur, aksi takdirde expression2 ifadesi değerlendirilir ve yeni bir öğe oluşturulur.

listem=[1,2,3,4,5,6]
yeni_listem=[i if i%2==0 else i**3 for i in listem]
print(yeni_listem)

 

Bu kodda, [i if i % 2 == 0 else i**3 for i in listem] ifadesi list comprehension’ını temsil eder. Burada, i değişkeni listem listesindeki her bir öğeyi temsil eder. İf-else ifadesi, i değeri çift ise i ifadesini, tek ise i**3 ifadesinin değerlendirilmesini sağlar.

Kodun çıktısı şu şekilde olacaktır:

 

Bu örnekte, if-else ifadesi for döngüsünden önce yer alır. Yani, expression if condition
else expression2
şeklinde bir yapı, variable in iterable ifadesinden önce kullanılabilir.

İleri Düzeyde Bir Algoritma Sorusu

Şimdi ileri bir algoritma sorusu ile konumuzu pekiştirelim.
Örneğimiz, list Comprehension yapısı kullanarak bir metin içerisinde en fazla tekrar eden kelimeyi bulalım.

metin="""Merhaba ben ibrahim python hakkında yazıyorum.
python esnektir, python kullanılışlıdır"""

kelimeSayisi={kelime:metin.split().count(kelime) for kelime in set(metin.split())}
print(kelimeSayisi)
tekrarEdeniBul=max(kelimeSayisi, key=kelimeSayisi.get)
print(f"En sık tekrar eden kelime: {tekrarEdeniBul}")

 

Bu kodda, metin değişkeni içindeki kelimeleri bulmak için split() metodunu kullandık ve set() fonksiyonu ile tekrar eden kelimeleri çıkardık. Daha sonra, for döngüsü ile her kelimeyi ele aldık ve sözlük yapısına dahil ettik. Her kelimenin sayısını count() metodunu kullanarak hesapladık.

En sık tekrar eden kelimeyi bulmak için max() fonksiyonunu kullanarak kelimeSayisi sözlüğündeki en yüksek sayıya sahip kelimeyi seçtik. Son olarak, bu kelimeyi ekrana yazdırdık.

Kodun çıktısı şu şekilde olacaktır:

Özetle bu örnekte, bir metindeki en sık tekrar eden kelimeyi list comprehension yapısı kullanarak bulduk. for döngüsü kullanarak her kelimeyi ele alarak sözlük yapısına dahil ettik ve max() fonksiyonu ile en sık tekrar eden kelimeyi bulduk.

Bu örnek, bir metindeki en sık tekrar eden kelimeyi bulmak için list comprehension’ın ne kadar kullanışlı olabileceğini göstermektedir.

 

List Comprehension ile ilgili örnekler

1. Basit Düzeyde Bir Örnek

Verilen bir metin içindeki tüm harfleri büyük harfe dönüştürme

metin="merhaba ibrahim"
buyukMetin=" ".join([kelime.upper() for kelime in metin.split()])
print(buyukMetin)

Kodun çıktısı aşağıdaki gibidir.

Bu örnekte, metin adlı string içindeki tüm harfleri büyük harfe dönüştürmek için list comprehension yapısını kullanıyoruz. İfade içinde, her bir harf için upper() fonksiyonu kullanılır ve ardından join() fonksiyonu kullanılarak harfler tekrar birleştirilir.

2. Orta Düzeyde Bir Örnek

Verilen bir liste içindeki her elemanın uzunluğunun 5’ten büyük olup olmadığını kontrol etme ve 5’ten büyük olanları başka bir liste içinde saklama

meyveler=["Elma","Karpuz","Portakal","Çilek","Muz","Erik"]
uzunKelimeler=" ".join([meyve for meyve in meyveler if len(meyve)>5])
print(uzunKelimeler)

Kodun çıktısı şu şekilde olacaktır:


Bu örnekte, meyveler adlı listedeki her bir elemanın uzunluğunun 5’ten büyük olup olmadığını kontrol etmek için list comprehension yapısını kullanıyoruz. if koşuluyla her bir elemanın uzunluğu kontrol edilir ve uzunluğu 5’ten büyük olan elemanlar uzunKelimeler adlı yeni bir listede saklanır.

3. İleri Düzeyde Bir Örnek

Verilen bir metin belgesinde en çok tekrar eden kelimeyi bulma

with open("metin.txt","r",encoding="UTF-8") as f:
    yazi=f.read()
    kelimeSayisi={kelime:yazi.count(kelime) for kelime in set(yazi.split())}
print(kelimeSayisi)
enCokTekrarEdenKelime= max(kelimeSayisi,key=kelimeSayisi.get)
print(f"en sık geçen kelime : {enCokTekrarEdenKelime}

Kodun çıktısı şu şekilde olacaktır:

Bu örnekte, bir metin dosyasındaki kelimelerin sayısını hesaplamak için list comprehension kullanıyoruz. İlk olarak, with ifadesi kullanarak metin dosyasını açıyoruz. Dosya okunur ve yazi adlı bir dizeye atanır. Daha sonra, set fonksiyonu kullanarak metindeki farklı kelimeleri elde ederiz. Son olarak, her kelimenin sayısını hesaplamak için sözlük oluştururuz. En sık geçen kelimeyi de max() fonksiyonunu kullanarak hesaplarız.

Burada dikkatinizi çekmek istediğim nokta, eğer set() kullanmazsak, yazi.split() fonksiyonu ile ayrılan bütün kelimeleri bir liste olarak elde ederiz. Daha sonra, bu kelimeler üzerinde döngü yaparak her bir kelimenin sayısını hesaplamak için dictionary comprehension kullanırız. Ancak, bu yöntemde her bir kelimenin sayısını hesaplamak için bütün metin üzerinde döngü yapmak gerektiği için performans açısından bir sorun oluşabilir.

Ayrıca, her bir kelimenin sadece bir kez hesaplanması gerektiği için, tekrarlayan kelimelerin hesaba katılması anlamsızdır. Bu nedenle, set() fonksiyonu kullanılarak yalnızca benzersiz kelimelerin bir kümesi elde edilir ve bu küme üzerinde döngü yapılır. Bu sayede, her kelimenin sadece bir kez hesaplanması sağlanır ve performans da artar.

Dolayısıyla, set fonksiyonunu kullanmadan önce, tüm metindeki kelimelerin ayrıldığı bir liste oluşacak ve bu liste üzerinde döngü yaparak sözlük oluşturulacaktır. Bu durumda, her bir kelimenin sayısını hesaplamak için tüm metin üzerinde döngü yapmak gerektiği için performans kaybı olabilir.

Bu örnek, bir metin dosyasında yer alan kelimelerin sayısını hesaplamak için oldukça karmaşık bir yöntem kullanmaktadır. Ancak, list comprehension yapısı bu işlemi oldukça kısa ve öz bir şekilde gerçekleştirmemizi sağlamaktadır.

 

Benzer Yazılar

Gui Dersleri #8 | LabelFrame kullanımı ve TopLevel kullanımı

Python 7 ay önce

Arkadaşlar merhaba bu makalemizde sizlere python’da LabelFrame kullanımı ve TopLevel kullanımının nasıl yappacağımızı anlatacağım.  Ayrıca size bu konu hakkında çektiğim video’yu bırakıyorum isteyen video izler isteyen aşağıdaki makaleyi okur. Şimdiden iyi seyirler ve iyi okumalar dilerim. ☺ LabelFrame kullanımı : LabelFrame widget’ı, bir çerçeve içindeki bir etiketle birlikte bir grup widget’ı oluşturmanıza olanak tanır. LabelFrame widget’ı, bir Frame widget’ının özelliklerine sahiptir ve ayrıca bir başlık etiketi içerir. Bu widget’lar, diğer widget’ları gruplandırmak için kullanılabilir. from tkinter import* pencere=Tk() pencere.title("label Frame örneği") pencere.geometry("400×300+200+200") kisi_bilgileri=LabelFrame(pencere,text="nüfus örneği", width=300,height=200) kisi_bilgileri.pack(pady=30) kisi_ad=Label(kisi_bilgileri,text="ad soyad") kisi_ad.place(x=20,y=20) kisi_ad_giris=Entry(kisi_bilgileri) kisi_ad_giris.place(x=120,y=20) pencere.mainloop()   yukarıdaki kodumuzda görüleceği üzere formlarda widgetların daha düzenli görünmesini sağlayan labelFrame’mizi  kisi_bilgileri=LabelFrame(pencere,text=”nüfus örneği”, width=300,height=200) şeklinde yükseklik ve genişlik değerleri vererek tanımladık. Bundan sonra ise ekleyeceğimiz widgetları pencere üzerinde tanımlamak yerine kisi_ad=Label(kisi_bilgileri,text=”ad soyad”) buradaki gibi kisi_bilgileri adında tanımladığım LabelFrame değişkeni üzerine eklediğimizi belirtiyoruz. kisi_ad_giris.place(x=120,y=20) burada da Entry nesnesini place özelliği ile x ve y değerlerini vererek konumlandırıyoruz. kodumuzun ekran […]

Python Dersleri | Bayrama özel uygulama yapımı

Python 8 ay önce

Arkadaşlar Merhabalar bugunkü makalemizde bayramda aklıma gelen bir uygulama senaryosunu gerçekleştirmesini size anlatıyor olacağım. Bayramda vakit ayırıp bunu yeni gerçekleştirdim umarım beğenirsiniz. Bayramınızı kutluyorum şimdiden iyi seyirler ve iyi okumalar dilerim. def __init__(self): Burada yapıcı(constructor ) fonksiyonumuzu tanımladık self belirteci  ile burada attribute’lar ve fonksiyonlara ulaşıyor oalcağız. self.pencere = tk.Tk() self.pencere.title("Bayram Uygulaması") self.pencere.geometry("500×400+500+300") burada pencere ayarlamasınız yaptık. self.soru1=tk.Label(self.pencere,text="1. Mezarlık ziyareti yapıldı mı?") self.soru1.grid(row=0,column=0) self.evet1=tk.Button(self.pencere,text="Evet",command=self.mezarlikEvet) self.evet1.grid(row=0,column=1) burada soru etkietimizi ve yanlarından evet ve hayır butonlarını ekledik burada grid(row,column) yapısına değinecek olursak elemanlarımı grid şeklinde bize yerleştirmemizi sağlayacaktır. def mezarlikEvet(self): self.skor+=20 self.evet1.config(state="disabled") self.hayir1.config(state="disabled") self.guncelle() def mezarlikHayir(self): self.evet1.config(state="disabled") self.hayir1.config(state="disabled") self.guncelle() burada ise buttonlarımızın command parametresine karşılık gelen fonksiyonlarımızı doldurduk. if(self.skor>=80): sonuc = "Neredeyse tüm görevleri yapmışssın helal sana be!🎊🎇 " elif(self.skor>=60 and self.skor<80): sonuc = "Kurban bayramının gerekliliklerini orta düzeyde karşılıyorsun. 😊" elif(self.skor>50 and self.skor<60): sonuc = "kurban bayramının olması gerektiği gibi değil maelesef 😔" else: sonuc = "olmaz öyle kardeşim böyle bayramda […]

Gui Dersleri #7 | Canvas kullanımı, Scale kullanımı ve Scrollbar kullanımı ile ilgili işlemler

Python 8 ay önce

Arkadaşlar merhaba bu makalemizde sizlere Canvas(Tuval) kullanımı, Scale(ölçek) kullanımı ve Scrollbar(Kaydırma çubuğu) kullanımının nasıl oluşturacağını anlatıyor olacağım ve bunlarla ilgili örnek uygulama yapacağım. Ayrıca size bununla ilgili yukarıda bir örnek video bırakıyorum isteyen video izler isteyen aşağıdaki makaleyi okur. Şimdiden iyi seyirler ve iyi okumalar dilerim. ☺ Canvas(Tuval) kullanımı: Canvas widgeti, Tkinter’da kullanılan bir çizim alanıdır. Bu widgeti kullanarak grafikler, şekiller, metinler ve diğer çizim öğelerini ekrana çizebilirsiniz. Canvas, çeşitli interaktif grafik uygulamaları ve veri görselleştirme için kullanışlıdır. from tkinter import* pencere=Tk() pencere.geometry("300×300+200+200") pencere.title("Canvas örneği") canvas1=Canvas(width=300,height=300,background="gray",highlightthickness=2) canvas1.pack() canvas1.create_rectangle(50,50,100,100,fill="blue") canvas1.create_oval(60,60,150,150,fill="red") canvas1.create_text(50,30,text="merhaba",font="courier 15",fill="yellow") pencere.mainloop()   Bu örnekte, Canvas sınıfını kullanarak bir tuval oluşturuyoruz. width ve height parametreleri tuvalin boyutlarını belirtir. create_rectangle() ve create_oval() metotlarıyla dikdörtgen ve elips gibi çizimler yapabiliriz. Ayrıca create_text() metoduyla da belirtilen özellikte bir text yazısı yazar. Kodlarımızın ekran çıktısı aşağıdaki gibidir:   Scale(Ölçek) kullanımı Scale widgeti, Tkinter’da kullanılan bir kaydırma çubuğu bileşenidir. Kullanıcının bir aralıktaki bir değeri seçmesini […]

0 Yorum

Yorum Yaz

Rastgele