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(*pairs).
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() добавляет к элементам их индекс. Все они упрощают работу с коллекциями и делают код короче и понятнее по сравнению с ручными циклами.