Вопросы по теме «Генераторы списков и встроенные функции»

List comprehensions, dict comprehensions, map, filter, zip, enumerate — идиоматический Python, который ожидают от аналитика. На собеседовании просят переписать цикл в comprehension, использовать sorted с ключом или объяснить разницу между map и генератором списка. Владение этими конструкциями показывает зрелость как Python-разработчика.

Всего в этом разделе 20 вопросов. Каждый — с правильным ответом и кратким разбором теории. Разбито на 4 части по 5 вопросов.

Коллекции и структуры данныхЦиклы и условияИсключения и отладкаРабота с файлами: JSON и CSVФункции и аргументыИтераторы и генераторыNumPy: основыPandas и DataFrameСинтаксис и типы данных

Вопросы 15 из 20

1Дан список `xs = [1, -2, 3, 0]`. Что вернёт выражение `[x * 2 for x in xs if x > 0]`?
A`[2, 6]`
B`[2, -4, 6, 0]`
C`[1, 3]`
D`[2, 6, 0]`
Ответ: В list comprehension условие после `if` фильтрует элементы, а выражение перед `for` вычисляется только для прошедших фильтр.

В выражении `[x * 2 for x in xs if x > 0]` сначала перебираются элементы `xs`, затем применяется фильтр `x > 0`, и только для оставшихся элементов вычисляется `x * 2`. Элементы, не прошедшие условие, просто не попадают в результат.

2Есть список булевых результатов проверок качества данных `checks`. Какое выражение наиболее прямо отвечает на вопрос «все проверки прошли»?
A`all(checks)`
B`any(checks)`
C`sum(checks)`
D`len(checks)`
Ответ: Для проверки «все ли условия выполнены» используйте `all()`.

`all(checks)` возвращает `True`, только если каждый элемент в `checks` истинный. `any(checks)` вернёт `True`, если истинно хотя бы одно условие. `sum(checks)` и `len(checks)` могут быть полезны в других задачах, но они не выражают смысл «все проверки прошли» так прямо.

3Есть список сумм `amounts = [0, 0, 10]`. Что вернёт выражение `any(a > 0 for a in amounts)`?
A`False`
BВыбросит `TypeError`
C`True`
DВернёт число элементов, для которых условие истинно
Ответ: `any()` возвращает `True`, если хотя бы одно значение (или условие в генераторе) истинно.

Выражение `any(a > 0 for a in amounts)` проверяет, существует ли хотя бы один элемент, для которого `a > 0`. Оно не считает количество таких элементов и не создаёт список булевых значений — оно останавливается, как только находит подходящий элемент.

4У вас уже есть функция `normalize_email` (принимает строку и возвращает строку). Нужно применить её к списку `emails` и получить новый `list`. Какой вариант можно считать уместным и читаемым?
A`list(map(lambda e: normalize_email(e), emails))`
B`list(map(normalize_email, emails))`
C`map(normalize_email, emails)`
D`list(filter(normalize_email, emails))`
Ответ: Если есть именованная функция и нет дополнительной логики, `list(map(func, items))` может быть читабельным; лишний `lambda` не нужен.

Вариант `list(map(normalize_email, emails))` короткий и понятный, потому что функция уже названа и сама по себе объясняет действие. `map(normalize_email, emails)` возвращает итератор, а не список. `filter()` здесь не подходит, потому что он предназначен для отбора элементов, а не для преобразования.

5Нужно получить список строк без пустых значений из `items`. Вы решили использовать `filter()`, и хотите избежать лишнего `lambda`. Какой вариант лучше?
A`list(filter(lambda x: x, items))`
B`list(filter(None, items))`
C`[x for x in items if x]`
D`filter(None, items)`
Ответ: `filter(None, items)` оставляет только truthy элементы, а обёртка `list(...)` превращает результат в список.

Если вы используете `filter()` для удаления пустых значений, вариант `list(filter(None, items))` обычно читается проще, чем `list(filter(lambda x: x, items))`, потому что не добавляет лишнюю `lambda`. Важно помнить: `filter()` возвращает итератор, поэтому для получения списка нужно обернуть в `list(...)`.

1234

Хотите тренировать интерактивно?

В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.

Тренировать в Telegram

Другие темы: Python

Коллекции и структуры данныхЦиклы и условияИсключения и отладкаРабота с файлами: JSON и CSVФункции и аргументыИтераторы и генераторыNumPy: основыPandas и DataFrameСинтаксис и типы данных