Python Zip, Map, Reduce ve Filter Fonksiyonları

Map() fonksiyonu ile elimizdeki elemanların tümüne aynı işlemi uygulayabiliriz.

Mesela elimizdeki liste elamanlarının hepsinin karekökünü almak istiyoruz.

from math import sqrt
liste=[4,9,16]
sonuc=map(sqrt,liste)
print(list(sonuc))

Kendi yazdığımız fonkisyonları da map fonkisyonu içerisinde kullanabiliriz.

map() fonksiyonuna birden fazla değer girebiliriz.

Aşağıdaki örnekte liste1 içindeki elamanların liste2 deki elamanlara göre üssünü aldım. 4 ün karesi, 3, ün küpü alındı. Ancak liste2 deki 6 değerine bir şey olmadı. Çünkü liste1 de 6 nın karşılığı yok.

from math import pow
liste1=[4,3]
liste2=[2,3,6]
sonuc=map(pow,liste1,liste2)
print(list(sonuc))

Zip() fonksiyonu ile iki listeyi birbiriyle demet olacak şekilde birleştirir.

liste1=["ahmet","ali","veli"]
liste2=["malatya","kütahya","izmir"]
birlestir=zip(liste1,liste2)

print(list(birlestir))
for x,y in birlestir:
  print(x,y)

Reduce() fonksiyonu kendisine verilen ilk elamanı değer olarak alıp sonraki eleman ile işlem yapıp, tek bir eleman döndüren bir fonksiyondur.

Bu karışık 🙂 ifadeden sonra örnek verip anlatmaya çalışayım

Aşağıdaki örnekte önceki sayı ile sonraki sayıyı toplayan bir işlem yapalım

from functools import reduce

sayi_listesi = [3,8,9,15,2]
def toplama(x, y):
    return x + y
sonuc = reduce(toplama, sayi_listesi)
print(sonuc)

Burada öncelikle 3 ile 8 i toplar. Sonra 11 ile 9 u. Sonra 20 ile 15 i. Son olarak da 35 ile 2 yi toplar.

filter() fonksiyonu ile filtreleme yapabiliriz.

Mesela bir liste içerisindeki sayıların sadece çift olanlarını almak istiyoruz.

liste=[3,5,4,8,10,46,6]
def kontrol(x):
  if(x%2==0):
    return True
  return False

cift_sayilar=filter(kontrol,liste)
print(list(cift_sayilar))

daha kısa yazılışı

liste=[3,5,4,8,10,46,6]
def kontrol(x):
  return x%2==0

Diğer Kaynaklar

https://www.sinanerdinc.com/python-map-zip-reduce-filter-kullanimi

https://www.vikikod.com/detail/134/pythonda-filter-fonksiyonu

Yayınlayan

Ahmet KADAK

Bilgisayar Öğretmeni & Bilgisayar Mühendisi

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.