В чем разница между функциями map и filter в Python?

Ответ

Обе функции обрабатывают итерируемые объекты, но решают разные задачи:

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

map(function, iterable)

Преобразует каждый элемент. Количество элементов в результате всегда равно количеству в исходной последовательности.

Пример: Получить квадраты чисел.

numbers = [1, 2, 3, 4]
squared_iterator = map(lambda x: x * x, numbers)

# Чтобы увидеть результат, преобразуем итератор в список
print(list(squared_iterator)) # Вывод: [1, 4, 9, 16]

filter(function, iterable)

Отбирает элементы по условию. Количество элементов в результате меньше или равно исходному.

Пример: Оставить только четные числа.

numbers = [1, 2, 3, 4, 5, 6]
even_iterator = filter(lambda x: x % 2 == 0, numbers)

print(list(even_iterator)) # Вывод: [2, 4, 6]

Альтернатива: Списковые включения (List Comprehensions)

Часто более читаемым и "pythonic" способом для тех же задач являются списковые включения.

numbers = [1, 2, 3, 4]

# Аналог map
squared_list = [x * x for x in numbers]
# [1, 4, 9, 16]

# Аналог filter
even_list = [x for x in numbers if x % 2 == 0]
# [2, 4]