map(), reduce(), filter(), zip(), enumerate()

Kategori: Python , 15 Eylül 2019 , JanFranco


Bu yazımda Python'da gömülü fonksiyonları inceleyeceğiz. İlk olarak map() fonksiyonu ile başlayalım. map() fonksiyonu ile listelerin elemanlarına yazdığımız fonksiyonları uygulayabiliriz:


def double(x):
    return x * 2


list_1 = [1, 2, 3, 4, 5, 6]

result = list(map(double, list_1))
print(result)
>>
[2, 4, 6, 8, 10, 12]
Sadece bir listeye değil, birden fazla listeye de uygulayabiliriz:


list_1 = [1, 2, 3, 4]
list_2 = [5, 6, 7, 8]
list_3 = [9, 10, 11, 12, 13]

result = list(map(lambda x, y, z: x * y * z, list_1, list_2, list_3))
print(result)
>>
[45, 120, 231, 384]
reduce() fonksiyonu ile listenin elemanlarını belirli bir pattern, bir örüntü gözeterek yazdığımız fonksiyonu uygulayabiliriz. Python 2'de gömülü halde bulunan reduce() fonksiyonu Python 3 ile functools kütüphanesine taşındı:


from functools import reduce

print(reduce(lambda x, y: x + y, [12, 18, 20, 10]))
>>
60
Burada yapılan işlemin şeması:


	12 + 18  20   10
	 \   /   /    /
	  30    /    /
       \   /    /
	    50     /
	     \    /
           60
Bir örnek daha yapalım:


from functools import reduce


def maximum(x, y):
    if x > y:
        return x
    else:
        return y


print(reduce(maximum, [-2, 1, 100, 35, 32]))
>>
100
filter() fonksiyonu map() fonksiyonu ile aynı işi yapar fakat filter() fonksiyonunda, parametre olarak gönderilen fonksiyonun boolean bir değer return etmesi gerekir:


print(list(filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])))
>>
[2, 4, 6, 8, 10]

def is_prime(x):
    i = 2
    if x == 1:
        return False
    elif x == 2:
        return True
    else:
        while i < x:
            if x % i == 0:
                return False
            i += 1
    return True


print(list(filter(is_prime ,range(1, 100))))
>>
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
zip() fonksiyonu ile listelerin elemanlarını birlikte gruplayabiliriz. İlk olarak zip() fonksiyonu kullanmadan iki listenin elemanlarını gruplayarak bir listeye atalım,


list_1 = [1, 2, 3, 4, 5]
list_2 = [6, 7, 8, 9, 10, 11]

i = 0
result = list()
while i < len(list_1) and i < len(list_2):
    result.append((list_1[i], list_2[i]))
    i += 1

print(result)
>>
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
print(list(zip(list_1, list_2)))
>>
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
Birden çok liste için de uygulayabiliriz:


list_1 = [1, 2, 3, 4]
list_2 = [5, 6, 7, 8]
list_3 = ["Python", "Php", "Java", "Javascript", "C"]

print(list(zip(list_1, list_2, list_3)))
>>
[(1, 5, 'Python'), (2, 6, 'Php'), (3, 7, 'Java'), (4, 8, 'Javascript')]
enumerate() fonksiyonu ile lisenin elemanlarını numaralandırabiliriz. İlk olarak fonksiyonu kullanmadan yapalım, daha sonra fonksiyonu kullanalım:


list_1 = ["Obj1", "Obj2", "Obj3", "Obj4"]
result = list()

i = 0
for j in list_1:
    result.append((i, j))
    i += 1

print(result)
>>
[(0, 'Obj1'), (1, 'Obj2'), (2, 'Obj3'), (3, 'Obj4')]
print(list(enumerate(list_1)))
>>
[(0, 'Obj1'), (1, 'Obj2'), (2, 'Obj3'), (3, 'Obj4')]
Bir başka örnek:


list_2 = ["a", "b", "c", "d", "e", "f", "g"]

for index, element in enumerate(list_2):
    if index % 2 == 0:
        print("Element: ", element)
>>
Element:  a
Element:  c
Element:  e
Element:  g
all() fonksiyonu bir listenin tüm elemanları True ise True, en az bir değer False ise False değer döndürür. any() fonksiyonu bütün değerler False ise False değer, en az bir değer True ise True değer döner. Bu iki fonksiyonu kullanmadan bir örnek yapalım, daha sonra fonksiyonu kullanalım:


def all_func(a_list):
    for i in a_list:
        if not i:
            return False
    return True


list_1 = [True, False, True, False, True]
print(all_func(list_1))
>>
False

def any_func(a_list):
    for i in a_list:
        if i:
            return True
    return False


print(any_func(list_1))
>>
True

print(all(list_1))
print(any(list_1))
>>
False
True


Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın