map(), filter(), reduce()

map()

map застосовує функцію до всіх елементів списку:

map(function_to_apply, list_of_inputs)

Необхідно передати всі елементи списку в функцію один за одним і зібрати значення, що повертаються в новий список. Наприклад:

items = [1, 2, 3, 4, 5]
squared = []
for i in items:
    squared.append(i**2)

map дозволяє виконати це завдання елегантним способом:

items = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, items))

А це не є простішим аналогом map’у:

squared = list((x**2 for x in items))

Найчастіше з map застосовують анонімні функції, як у прикладі вище. Замість списку вхідних даних також можна використовувати список функцій:

def multiply(x):
    return (x*x)
def add(x):
    return (x+x)

funcs = [multiply, add]
for i in range(5):
    value = list(map(lambda x: x(i), funcs))
    print(value)

# Результат:
# [0, 0]
# [1, 2]
# [4, 4]
# [9, 6]
# [16, 8]

filter()

filter повертає список елементів, для яких задана функція повертає True:

number_list = range(-5, 5)
less_than_zero = list(filter(lambda x: x < 0, number_list))
print(less_than_zero)

# Результат: [-5, -4, -3, -2, -1]

filer є вбудованою функцією і працює швидше, ніж цикл.

reduce()

reduce дуже корисна функція для виконання обчислень на списку та повернення єдиного результату. Вона згортає список, застосовуючи отриману як аргумент функцію по черзі до послідовних пар елементів. Наприклад, якщо ми хочемо порахувати добуток всіх елементів списку чисел.

Звичайним вирішенням цього завдання буде використання циклу for:

product = 1
list = [1, 2, 3, 4]
for num in list:
    product = product * num

# product = 24

reduce:

from functools import reduce
product = reduce((lambda x, y: x * y), [1, 2, 3, 4])

# product = 24

Last updated