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