map() fonksiyonu, bir liste ya da demet gibi iterasyon yapılabilir veri türlerinin her bir verisini bir fonksiyona tek tek parametre olarak göndermek için kullanılır.

Daha önce parametre sayısı bilinmediğinde, yani değişen sayıda parametre alan fonksiyonlara nasıl parametre gönderebileceğimizi Fonksiyonlar konusu altında yer alan   “*args: Parametre Sayısı Bilinmediğinde” başlığı altında incelemiştik.

Benzer şekilde maps() fonksiyonu da liste ya da demet gibi bir veri koleksiyonunu parametre olarak kullanabilmemizi sağlıyor.

def karesi(sayi):
  return sayi*sayi

veriler=(3,5,78,1343)

kareleri=map(karesi,veriler)

sonuc=list(kareleri)

print(sonuc)

Çıktı:

[9, 25, 6084, 1803649]

Gördüğünüz gibi verilen bir sayının karesini hesaplayan bir fonksiyonumuz var. Ancak bu işlemi yüzlerce veri için yapmamız gerektiğini düşünelim. Verileri fonksiyona parametre olarak göndermek için map() fonksiyonundan yararlandık. Bu fonksiyon bize bir nesne döndürür. Bu nesnede depolanan verileri listeye çevirip print ile ekranda görüntüleyebiliriz.

Açık ve anlaşılır olması bakımından ilk örneğimizi detaylıca yazdık ve uygulamayı gösterdik. İsterseniz aynı örneği lambda fonksiyonu ile tek satırda da yazabilirsiniz;

print(list(map(lambda sayi: sayi*sayi, veriler)))

Çıktı:

[9, 25, 6084, 1803649]

 

Bir başka örnek ile birden fazla veri koleksiyonundan veri almayı görelim;

def birlestir(a, b):
  return a + b

veriler1=('sarı-', 'sarı-', 'siyah-')
veriler2=('lacivert', 'kırmızı', 'beyaz')

sonuc = map(birlestir, veriler1, veriler2 )

print("Kulüplerimizin renkleri: ",list(sonuc))

Çıktı:

Kulüplerimizin renkleri: ['sarı-lacivert', 'sarı-kırmızı', 'siyah-beyaz']

 

Aynı örneğin lambda fonksiyon gösterimi;

print("Kulüplerimizin renkleri: ", list(map(lambda a,b: a+b, veriler1,veriler2)))

Çıktı:

Kulüplerimizin renkleri: ['sarı-lacivert', 'sarı-kırmızı', 'siyah-beyaz']

 

Şimdi gerçek hayat uygulamasına yakın bir örnek verelim. Projeniz bir fiyat takip uygulaması olsun ve Türkiye’nin 2 büyük alışveriş sitesinden aynı ürünlerin fiyatlarını karşılaştırdığınızı düşünelim.

4 farklı ürün incelediğinizi varsayalım. Bu ürünler için alışveriş sitelerinden çektiğiniz veriler de şu şekilde olsun;

TrendPazaryeri=[10.00, 11.00, 12.34, 2.34]

HepsiPazaryeri=[9.00, 11.10, 12.34, 2.01]

En ucuz fiyatları bulmak için map() fonksiyonundan yararlanabiliriz;

trendPazaryeri=[10.00, 11.00, 12.34, 2.34]
hepsiPazaryeri=[9.00, 11.10, 12.34, 2.01]

eniyifiyatlar=list(map(min, trendPazaryeri, hepsiPazaryeri))
print("En iyi fiyatlar: ", eniyifiyatlar)

Çıktı:

En iyi fiyatlar: [9.0, 11.0, 12.34, 2.01]

Tabii uygulamanın en basit şekli bu. Geliştirip hangi fiyatın hangi ürüne ait olduğunu ve hangi pazaryerinde bulunduğunu görüntüleyecek seviyeye getirdiğinizde piyasada kullanabileceğiniz seviyede bir uygulamanız olur.

 

Michigan Üniversitesinin Veri Bilimi(Data Science) derslerinden bir örnekle konuyu sonlandıralım.

Örnek problem de bize öğretim üyelerinin bir listesi veriliyor ve bu listedeki Unvan Ad Soyad (Ör;Dr. Christopher Brooks) şeklinde verilmiş olan isimleri Unvan Soyad (Ör; Dr.Brooks) şekline dönüştürmemiz isteniyor. Verilerimiz şunlar;

ogretim_gorevlileri = [‘Dr. Christopher Brooks’, ‘Dr. Kevyn Collins-Thompson’, ‘Dr. VG Vinod Vydiswaran’, ‘Dr. Daniel Romero’]

Çözüm;

ogretim_gorevlileri = ['Dr. Christopher Brooks', 'Dr. Kevyn Collins-Thompson', 'Dr. VG Vinod Vydiswaran', 'Dr. Daniel Romero']

def unvan_ve_soyad(kisi):
    unvan = kisi.split()[0]
    soyad = kisi.split()[-1]
    return '{} {}'.format(unvan, soyad)

sonuc=list(map(unvan_ve_soyad, ogretim_gorevlileri))
print(sonuc)

Çıktı:

[‘Dr. Brooks’, ‘Dr. Collins-Thompson’, ‘Dr. Vydiswaran’, ‘Dr. Romero’]

Burada yer alan örnek kodları şu sayfada inceleyebilirsiniz:

https://repl.it/@ObenSEVEN/map