code_to_name = {"RU": "Russia", "FR": "France"}. Нужно получить обратное отображение name_to_code (предполагаем, что значения уникальны). Какой вариант корректен?List comprehensions, dict comprehensions, map, filter, zip, enumerate — идиоматический Python, который ожидают от аналитика. На собеседовании просят переписать цикл в comprehension, использовать sorted с ключом или объяснить разницу между map и генератором списка. Владение этими конструкциями показывает зрелость как Python-разработчика.
Всего в этом разделе 20 вопросов. Каждый — с правильным ответом и кратким разбором теории. Разбито на 4 части по 5 вопросов.
В выражении `[x * 2 for x in xs if x > 0]` сначала перебираются элементы `xs`, затем применяется фильтр `x > 0`, и только для оставшихся элементов вычисляется `x * 2`. Элементы, не прошедшие условие, просто не попадают в результат.
Подробный разбор →Когда нужно ответить «все ли проверки прошли», подходит `all(checks)`: достаточно одного `False`, чтобы результат стал `False`. `any(checks)` отвечает на другой вопрос — «есть ли хотя бы одна успешная проверка». `sum(checks)` посчитает количество истинных проверок, а не выдаст один общий флаг. `len(checks)` вообще не смотрит на значения, а возвращает длину списка.
Подробный разбор →Функция `any()` принимает любой итерируемый объект, в том числе генераторное выражение, и возвращает булево значение. Для `[0, 0, 10]` условие `a > 0` истинно на третьем элементе, поэтому результат — `True`. Нули в списке не «перевешивают» истинное значение: `any` ищет хотя бы одно истинное. `any` возвращает именно `True`/`False`, а не количество подходящих элементов (для этого подошёл бы `sum`).
Подробный разбор →`list(map(normalize_email, emails))` — самая компактная и читаемая запись: функция передана напрямую, итератор приведён к списку. `lambda e: normalize_email(e)` — лишняя обёртка, которая делает ровно то же самое. `tuple(map(...))` тоже применяет функцию к каждому элементу, но возвращает кортеж, а не список. `filter(normalize_email, ...)` использовал бы функцию как предикат и возвращал только те значения, которые `normalize_email` посчитала бы истинными, — это совсем другая операция.
Подробный разбор →При первом аргументе `None` функция `filter` использует встроенный тест на «истинность» каждого элемента — это эквивалент `lambda x: x`, но без явной обёртки. `list(filter(None, items))` сразу возвращает список, как просили. Вариант с `lambda x: x` делает то же самое, но добавляет лишнюю функцию. У `map` `None` в качестве функции — устаревшая форма, в Python 3 это вызовет `TypeError`. У списка `items` нет метода `.filter()`, такой вызов поднимет `AttributeError`.
Подробный разбор →В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.
Тренировать Python в Telegram