Что такое map(), filter(), zip(), enumerate()?

Все четыре — встроенные функции для работы с итерируемыми объектами: map(func, iterable, ...) — применяет функцию к каждому элементу и возвращает итератор результатов. filter(func, iterable) — оставляет только те элементы, для которых функция вернула True. zip(iter1, iter2, ...) — «сшивает» несколько итерируемых объектов в кортежи по позициям. enumerate(iterable, start=0) — добавляет к элементам порядковый номер (индекс, значение).

Подробный ответ

map() — применение функции к каждому элементу

map() берёт функцию и один или несколько итерируемых объектов и возвращает итератор, в котором каждый элемент — результат применения функции к соответствующим элементам входа.

numbers = [1, 2, 3]
squares = map(lambda x: x * x, numbers)
print(list(squares))  # [1, 4, 9]

Особенности:

Не создаёт список сам по себе в Python 3, возвращает ленивый итератор. 

Часто его функциональность удобнее выражать list‑comprehension’ом: [x * x for x in numbers]

filter() — отбор по условию

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

numbers = [1, 2, 3, 4, 5, 6]
evens = filter(lambda x: x % 2 == 0, numbers)
print(list(evens))  # [2, 4, 6]

Тоже возвращает итератор. Аналог на list‑comprehension: [x for x in numbers if x % 2 == 0].

zip() — параллельный обход и «сшивание» коллекций

zip() объединяет элементы нескольких итерируемых объектов в кортежи по их индексам.

names = ["Alice", "Bob", "Carol"]
scores = [10, 20, 15]
pairs = list(zip(names, scores))
# [('Alice', 10), ('Bob', 20), ('Carol', 15)]

Особенности:

Останавливается, когда закончился самый короткий из входных итерируемых объектов. Очень удобен для «параллельного» обхода нескольких списков и для разворота структур (zip(*data)).

enumerate() — индекс + значение

enumerate() добавляет к элементам последовательности счётчик (индекс).

users = ["Ann", "Max", "Leo"]
for i, name in enumerate(users, start=1):
   print(i, name)
# 1 Ann
# 2 Max
# 3 Leo

Преимущества:

Не нужно писать громоздкое for i in range(len(users)): и обращаться users[i].

start позволяет задать начальный номер (по умолчанию 0).

Как компактно ответить на собеседовании

map применяет функцию к каждому элементу и даёт итератор результатов, filter отбрасывает элементы, не прошедшие условие, zip «сшивает» несколько последовательностей в кортежи по позициям, а enumerate добавляет к каждому элементу его индекс. Все они упрощают работу с коллекциями и делают код короче и понятнее по сравнению с ручными циклами.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге