3 Mart 2014 Pazartesi

map(), filter(), reduce() Fonksiyonları

Bu bahsettiğimiz fonksiyonlar listeler ile kullanıldıklarında müthiş kolaylıklar sağlıyorlar. Hemen kullanımlarına bakalım.







map() Fonksiyonu
Kullanımı;
map(fonksiyon,liste,...)
map() fonksiyonu parametre olarak aldığı fonksiyona , parametre olarak aldığı listenin her elemanını sırasıyla parametre olarak gönderir. Bol parametreli bir cümle oldu. Anlaşılması için örnek verelim.
>>> def kare(sayi):
...     return sayi*sayi
... 
>>> sayilar = range(1,10)
>>> map(kare,sayilar)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
Sanırım bu örnek ile ne demek istediğimizi anladınız. Elimizde 1 den 10 kadar olan sayıları barındıran bir liste bulunuyor. map fonksiyonu bu listenin tüm elemanlarını tek tek kare fonksiyonuna gönderiyor. Geriye döndürdüğü değer iste yine aynı şekilde bir liste.
>>> def kucult(karakter):
...     return karakter.lower()
... 
>>> kelimeler = ['SakarYa','PythoN','ProgramLama','FonksiYon','PythonDersleri','DjAngo']
>>> map(kucult,kelimeler)
['sakarya', 'python', 'programlama', 'fonksiyon', 'pythondersleri', 'django']
Tek bir liste için kullanmak zorunda değilsiniz. Birden fazla liste için uygulanabilir. Dikkat etmeniz gereken noktalar;
  • Oluşturduğunuz fonksiyonun argüman sayısı gönderilen liste adeti kadar olmalıdır.
  • Gönderilen listelerin eleman sayıları eşit olmalıdır.
Eğer bu kurallara uymazsanız hata dönecektir.
>>> def carp(sayi1,sayi2):
...     return sayi1*sayi2
... 
>>> sayilar1 = range(1,10)
>>> sayilar2 = range(11,20)
>>> map(carp,sayilar1,sayilar2)
[11, 24, 39, 56, 75, 96, 119, 144, 171]
filter() Fonksiyonu
filter() fonksiyonu ise çağırılan fonksiyonun döndürdüğü değerin true olduğu durumlara göre liste döndürür. Yani fonksiyona gönderilen değerler içerisinden istediklerimizi alarak yeni liste oluşturmamızı sağlar. Yani elimizdeki liste üzerinde filtreleme yapmamızı sağlar.
>>> def teksayi(sayi):
...     return sayi%2==1
... 
>>> liste = range(1,20)
>>> filter(teksayi,liste)
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
teksayi() fonksiyonu eğer sayı tek ise true değeri döndürüyor. filter() fonksiyonu ise geriye bir liste döndürüyor. Bu listeye ise true değeri dönen elemanları ekliyor.
>>> def baslik(karakter):
...     return karakter.istitle()
... 
>>> liste = ['Python Dersleri','django','Python','Sakarya universitesi']
>>> filter(baslik,liste)
['Python Dersleri', 'Python']
title() fonksiyonu karakter dizisinin tüm karakterleri büyük harfle başlıyorsa true değeri döndürür. filter() fonksiyonu ile bunları filtrelemiş olduk.
reduce() Fonksiyonu
reduce() fonksiyonun içerisinde çağrılan fonksiyon iki argüman alır. Bu argümanlar ilk önce listenin ilk iki elemanıdır. Daha sonra dönen sonuç ve üçüncü elemanı, dönen sonuç ve dördüncü elemanı şeklinde devam eder. reduce fonksiyonu geriye bir liste döndürmez. Geri tek bir sonuç döner. Örneğin bu şekilde 10 sayısının faktoriyelini hesaplayabiliriz.
>>> def faktoriyel(sayi1,sayi2):
...     return sayi1*sayi2
... 
>>> sayilar = range(1,11)
>>> reduce(faktoriyel,sayilar)
3628800
Burada faktoriyel fonksiyonuna ilk önce 1 ve 2 sayısı gönderilir. Ardından bundan dönen değer yani 2 ve listenin 3.elemanı yani 3 gönderilir. Bu işlem bu şekilde devam ettiği için 10 sayısının faktoriyelini hesaplamış olduk.
Bu fonksiyon yardımıyla bir liste elemanlarını birleştirelim. Bu işlemi yapmamız çok mantıksız olsa da sadece anlamak açısında gösterelim. Çünkü aşağıdaki tek satır kod aynı işi yapacaktır.
>>> metinler = [u"pythondersleri.com",u"python",u"teknolojileri",u"hakkinda",u"egitim",u"verir"]
>>> " ".join(metinler)
u'pythondersleri.com python teknolojileri hakkinda egitim verir'
Şimdide bu birleştirme işlemini reduce() fonksiyonu yardımıyla yapalım.
>>> def birlestir(metin1,metin2):
...     return str(metin1)+" "+str(metin2)
... 
>>> metinler = [u"pythondersleri.com",u"python",u"teknolojileri",u"hakkinda",u"egitim",u"verir"]
>>> reduce(birlestir,metinler)
'pythondersleri.com python teknolojileri hakkinda egitim verir'
Bu gösterdiğimiz fonksiyonları kullanarak Listeler ile çok kolay bir şekilde işlem yapmak mümkündür. Listeler ile yaptığınız işlemleri demetler ile de yapabilirsiniz.
Kaynakça

1 yorum :

  1. The title() method returns a string where the first character in every word is upper case.

    YanıtlayınSil