Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+666новых вакансий за сутки·52 265вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 686
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 394 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python5 973
  • Облачные технологии4 523
  • QA вакансии1 689
  • Android1 143
  • Инженер данных788
  • Продакт-менеджер308

Разработка

  • iOS1 093
  • Backend вакансии1 020
  • Fullstack вакансии448
  • AI вакансии378
  • Frontend вакансии369
  • Mobile вакансии27

По стеку

  • Go3 345
  • Java2 037
  • Kotlin908
  • Node.js746
  • Rust492
  • .NET481
  • PHP278
  • C++213
  • C#199

DevOps и инфраструктура

  • Kubernetes2 562
  • Linux-инфраструктура2 030
  • DevOps вакансии1 855
  • Terraform / IaC1 548
  • CI/CD876
  • Мониторинг и Observability709
  • SRE229
  • Кибербезопасность40

Аналитика и данные

  • Аналитик данных479
  • Data Scientist443
  • Бизнес-аналитик342
  • Системный аналитик50

Другие направления

  • Проджект-менеджер107
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США24 039
  • Вакансии в Европе9 373
  • Работа в России2 968
  • Вакансии в Канаде2 114

По формату

  • Удалённые вакансии41 595
  • Релокация в США24 039
  • Офисная работа3 834
  • Гибридная работа3 695

По уровню

  • Senior вакансии22 591
  • Middle вакансии12 174
  • Junior вакансии4 013

Сейчас нанимают

Все компании
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise81 вакансия
  • Infobip28 вакансий
  • Darktrace17 вакансий
  • Spotify17 вакансий
  • Celonis14 вакансий
  • UiPath13 вакансий
  • Adyen9 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме PythonВсе вопросы
PythonMiddleКодинг

Объясните разницу между map(), filter() и reduce().

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

map() применяет функцию к каждому элементу, filter() отбирает по условию, reduce() сворачивает в одно значение. В Python 3 map и filter возвращают ленивые итераторы; в современном коде их часто заменяют list comprehension.

map(), filter(), reduce(): назначение и сигнатуры

  • map(func, iterable): применяет func к каждому элементу, возвращает ленивый итератор.
  • filter(func, iterable): оставляет элементы, для которых func возвращает True, возвращает ленивый итератор.
  • reduce(func, iterable[, initial]): сворачивает последовательность в одно значение; в Python 3 находится в functools.
from functools import reduce

numbers = [1, 2, 3, 4, 5, 6]

# map: удвоить каждый элемент
doubled = list(map(lambda x: x * 2, numbers))
print(doubled)   # [2, 4, 6, 8, 10, 12]

# filter: оставить чётные
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens)     # [2, 4, 6]

# reduce: произведение всех элементов
product = reduce(lambda acc, x: acc * x, numbers)
print(product)   # 720

# reduce с initial value
total = reduce(lambda acc, x: acc + x, numbers, 0)
print(total)     # 21

map и filter возвращают итераторы (Python 3)

result = map(str, [1, 2, 3])
print(type(result))    # <class 'map'>
print(result)          # <map object at 0x...>
print(list(result))    # ['1', '2', '3']

# Итератор одноразовый
print(list(result))    # []  — уже исчерпан

Идиоматичная альтернатива в Python

В современном Python map/filter часто заменяют list comprehension — они читаются лучше:

# map → list comprehension
doubled_lc = [x * 2 for x in numbers]

# filter → list comprehension с условием
evens_lc = [x for x in numbers if x % 2 == 0]

# Комбинация map + filter
result_lc = [x * 2 for x in numbers if x % 2 == 0]

# vs map(filter(...))
result_mf = list(map(lambda x: x * 2, filter(lambda x: x % 2 == 0, numbers)))
# Читаемость хуже

Когда map/filter полезны

# 1. Применение уже существующей функции (не lambda)
strings = ["  hello  ", " world ", "  python"]
stripped = list(map(str.strip, strings))   # Лучше, чем [s.strip() for s in strings]

# 2. Работа с несколькими итерируемыми (map поддерживает несколько итерируемых)
a = [1, 2, 3]
b = [10, 20, 30]
sums = list(map(lambda x, y: x + y, a, b))   # [11, 22, 33]
# Или: list(map(sum, zip(a, b)))

# 3. Цепочка трансформаций в функциональном стиле
import operator
from functools import reduce

factorial = reduce(operator.mul, range(1, 8))   # 7! = 5040

# 4. reduce для нестандартных агрегаций
from typing import TypeVar
T = TypeVar('T')

def deep_merge(dicts: list[dict]) -> dict:
    return reduce(lambda a, b: {**a, **b}, dicts, {})

result = deep_merge([{"a": 1}, {"b": 2}, {"c": 3}])
print(result)   # {'a': 1, 'b': 2, 'c': 3}

reduce: подводные камни с пустым итерируемым

from functools import reduce

# Пустой iterable без initial — ValueError
try:
    reduce(lambda a, b: a + b, [])
except ValueError as e:
    print(e)   # reduce() of empty iterable with no initial value

# С initial — безопасно
result = reduce(lambda a, b: a + b, [], 0)   # 0

Подводные камни

  • map/filter — итераторы, не списки: передача в len() вызывает TypeError; нужно материализовать через list() или tuple().
  • reduce на пустом iterable: без initial вызывает ValueError.
  • lambda в map читается хуже: если трансформация нетривиальна — лучше именованная функция или comprehension.
  • reduce для сложных агрегаций: трудно отлаживать, трудно читать — часто лучше явный цикл.
  • map с несколькими итерируемыми разной длины: итерация прекращается по самому короткому — как zip(), не zip_longest().
  • Изменение типов в filter: filter(None, items) фильтрует falsy значения (0, "", [], None) — не только None.

Типичные ошибки

  • Описывать map filter reduce только как термин и не показывать механизм на минимальном примере.
  • Игнорировать ошибки, пустые данные, конкурентный доступ или границы транзакции.
  • Не связывать поведение с официальным контрактом Python и реальной эксплуатацией.

Что проверяет интервьюер

  • Объясняет map filter reduce через последовательность действий, а не через набор ключевых слов.
  • Приводит короткий кодовый пример или production-сценарий с ожидаемым поведением.
  • Называет хотя бы один риск: производительность, безопасность, транзакции, память или сопровождение.

Как вы знаете этот вопрос?

Проверить себя по теме Python →

Источники

  • https://docs.python.org/3/tutorial/datastructures.html
  • https://docs.python.org/3/reference/datamodel.html

Связанные темы

Pythonimplementationtechnical-reasoning

Частые вопросы на собеседовании

  • Что такое truthy и falsy значения в Python?
  • Когда использовать threading?
  • Что такое type hints и зачем они нужны?
  • Как работает yield?