Python’ da Map, Filter ve Reduce Fonksiyonları
Python dilinde program yazdığımızda sürekli listeler ve döngüler ile ilgili işlemler yaparız. Bu işlemleri yaparken python bize kodlarımızın basit, okunabilir ve kısa bir şekilde yazılmasını sağlayan üç kullanışlı fonksiyon sunar.
Bu yazıda map, filter ve reduce
fonksiyonlarını inceleyeceğiz. map ve filter
fonksiyonları dahili(built-in) fonksiyonlardır. Ancak reduce fonksiyonu functools modulünde bulunduğu için scriptimize import etmemiz gerekiyor.
map()
map(function, iterable)
: Map fonksiyonu parametre olarak fonksiyon ve liste, demet gibi döngüye sokulabilecek veri alır.
Örnekler:
Listemizdeki değerlerin 2 katını bir liste halinde elde etmek istiyoruz. Bunu hem döngü ile hem de map fonksiyonu ile yapalım.
liste = [1, 2, 3, 4] def iki_kati(sayi): return sayi * 2 #1. Yöntem bos_liste = [] for i in liste: bos_liste.append(iki_kati(i)) print(bos_liste) # Çıktı : [1, 4, 6, 8] #2. Yöntem: map Fonksiyonu ile sonuc = map(iki_kati, liste) print(list(sonuc)) # Çıktı : [1, 4, 6, 8]
Önemli : map fonksiyonu bize bir obje döndürür.
Sonucu bir liste halinde görmek istiyorsak, sonucu liste fonksiyonu ile listeye çevirmek gerekiyor.
Örnek : İki listeyi map fonksiyonuna sokma
liste_1 = [1, 2, 3, 4, 5] liste_2 = [2, 4, 6, 8] def alan_hesabi(x, y): return x* y sonuc = map(alan_hesabi, liste_1, liste_2) print(list(sonuc)) # Çıktı : [2, 8, 18, 32]
Görüldüğü gibi sonuç listesi en küçük boyuttaki listenin boyutu kadar geri döndü.
Örnek : map() Fonksiyonunu lambda fonksiyonu ile kullanma
Genelde map() fonksiyonu lamda fonksiyonu ile birlikte kulanılırlar.
liste= [1, 2, 3, 4] sonuc = map(lambda x: x**2, liste) print( list( sonuc ) ) # Çıktı : [1, 4, 9, 16]
map fonksiyonuna fonksiyon listeside parametre olarak verilebilinir.
filter()
filter(function, iterable)
: filter fonksiyonu parametre olarak fonksiyon ve liste, demet gibi döngüye sokulabilecek veri alır. Geriye true koşulunu sağlayan değerleri döndürür.
Örnek :
liste = [2, 8, 4, 1, 6, 3, 7, 8 ,9] besden_buyuk = list( filter( lambda x : x >5 , liste)) print( besden_buyuk ) # Çıktı : [8, 6, 7, 8, 9]
Görüldüğü gibi çıktı olarak 5′ den büyük değerleri olan obje döndü ve biz bunu list() fonksiyonu ile listeye çevirdik.
reduce()
reduce(function, iterable)
: reduce fonksiyonu parametre olarak fonksiyon ve liste, demet gibi döngüye sokulabilecek veri alır.
from functools import reduce sayilar = [1, 3, 5, 7, 9] toplam = reduce (lambda x, y : x +y, sayilar ) print( toplam ) # Çıktı : 49
Aşağıdaki resimden reduce fonksiyonunun nasıl çalıştığını anlayabilirsiniz.
map() ve filter() fonksiyonları python’ ın dahili fonksiyonları olduğu için for döngülerine göre biraz daha hızlıdır.
Son olarak bu fonksiyonlar kod okunabilirliğini azaltacağı için lambda fonksiyonlarla çok fazla kullanmamalıdır.