Map, filter ve reduce programlamaya yönelik fonksiyonel bir yaklaşımı kolaylaştıran üç fonksiyondur. Bu bölüm bu fonksiyonlara ayrılmıştır.
17.1. Map
Bir listedeki tüm öeğelere bir fonksiyonu uygular. Sözdizimi:
map(fonksiyon ismi, liste)
şeklindedir. Bu fonksiyonun yararını anlamak için öncelikle bir problem belirleyelim ve klasik yaklaşımla probleme çözüm bulalım.
1 2 3 4 5 6 7 |
l = [1, 2, 3, 4, 5] l_karesi = [] for i in l: l_karesi.append(i**2) print(l) print(l_karesi) |
1 2 |
[1, 2, 3, 4, 5] [1, 4, 9, 16, 25] |
Map aynı kodu çok daha güzel ve sade şekilde yazmamıza olanak sağlar.
1 2 3 4 5 |
l = [1, 2, 3, 4, 5] l_karesi = list(map(lambda x: x**2, l)) print(l) print(l_karesi) |
Yukarıdaki çıktı ile aynı çıktıyı üretir. Çoğu zaman map ile lambda birlikte kullanılır, ancak bir fonksiyonu listesi bir liste yerine kullanabiliriz. Örneğin,
1 2 3 4 5 6 7 8 9 |
def carpma(x): return (x*x) def toplama(x): return (x+x) fonks = [carpma, toplama] for i in range(5): deger = list(map(lambda x: x(i), fonks)) print(deger) |
1 2 3 4 5 |
[0, 0] [1, 2] [4, 4] [9, 6] [16, 8] |
17.2. Filter
Filter bir fonksiyondan True dönen elementler için bir liste oluşturur. Örneğin,
1 2 3 4 |
l = list(range(-5, 5)) print(l) sifirdanbuyuk_l = list(filter(lambda x: x > 0, l)) print(sifirdanbuyuk_l) |
1 2 |
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4] [1, 2, 3, 4] |
Filtre bir for döngüsünü andırır, ancak yerleşik bir fonksiyondur ve çok daha hızlıdır.
17.3. Reduce
Reduce bir liste üzerine bazı hesaplamaları gerçekleştirmek ve bir sonuç döndürmek için çok kullanışlı bir fonksiyondur. Bir listedeki öğelerin çarpımı döndüren bir kod yazalım. Klasik bir programcı aşağıdaki şekilde kod yazar.
1 2 3 4 5 6 |
sonuc = 1 l = [1, 2, 3, 4, 5, 6] for oge in l: sonuc *= oge print(sonuc) |
1 |
720 |
Bir döngü ile listeyi dolaştık ve sonucu sonuç adında bir değişkene aktardık. Şimdi reduce kullanarak aynı işlemi yapalım.
1 2 3 4 |
from functools import reduce l = [1, 2, 3, 4, 5, 6] sonuc = reduce((lambda x, y: x * y), l) print(sonuc) |
Öncelikle reduce fonksiyonunu import ettik. lambda ile listenin tüm elemanları çarpılıp sonuç döndürülüyor.