Python: map, filter, reduce, zip — функции для работы с итераторами

Функции map, filter, reduce и zip — встроенные функции Python, упрощающие работу с итерабельными объектами (списками, кортежами, строками и др.).

Функция Map

Функция map принимает функцию и итерабельную последовательность. Она применяет функцию к каждому элементу последовательности и возвращает итератор с результатами.

Пример: Преобразование строк в целые числа.

Задача: прочитать файл с парами чисел, разделенных пробелами, преобразовать строки в целые числа и посчитать сумму каждой пары.

f = open('27.txt', 'r')
n = int(f.readline())

a, b = zip(*map(lambda x: map(int, x.split()), [f.readline() for _ in range(n)]))
print(sum(a) + sum(b))

Описание:

  1. Открываем файл и считываем количество пар чисел.
  2. Генератор списка [f.readline() for _ in range(n)] считывает данные построчно.
  3. map(lambda x: map(int, x.split()), …) применяет lambda x: map(int, x.split()) к каждой строке. x.split() разделяет строку на числа, а map(int, …) преобразует подстроки в целые числа.
  4. zip(*…) группирует числа в пары.
  5. sum(a) + sum(b) вычисляет сумму пар.

map работает как со встроенными функциями (например, int), так и с пользовательскими:

def f(a, b):
  return a * b

a = list(map(f, [2, 4, 5], [5, 6, 7])) # Применение к двум спискам
print(a) # Вывод: [10, 24, 35]

Пример с lambda-функцией:

a = list(map(lambda x: x + 15, (2, 4, 5))) # Прибавление 15 к каждому элементу кортежа
print(a) # Вывод: [17, 19, 20]

Функция Filter

Функция filter фильтрует элементы последовательности. Она принимает функцию (возвращающую True или False) и итерабельную последовательность. Возвращает итератор с элементами, для которых функция вернула True.

Пример: Фильтрация четных чисел.

a = list(filter(lambda x: x % 2 == 0, (2, 4, 5))) # Фильтрация четных чисел в кортеже
print(a) # Вывод: [2, 4]

Функция Reduce

Функция reduce (модуль functools) применяет функцию к последовательности, сводя её к одному значению.

from functools import reduce

a = reduce(lambda x, y: x * y, (8, 9, 12, 100)) # Перемножение всех элементов кортежа
print(a) # Вывод: 86400

Функция Zip

Функция zip объединяет итерабельные последовательности, создавая кортежи из соответствующих элементов.

Пример: Объединение списка и строки.

a = [1, 2, 3, 4]
b = "abcd"
result = list(zip(a, b))
print(result) # Вывод: [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]

Функции map, filter, reduce и zip — эффективные инструменты Python для обработки данных. Они делают код компактнее и читабельнее.

Что будем искать? Например,программа