Дан список vals = [0, 1, 2]. Что вернёт выражение [x if x % 2 == 0 else -1 for x in vals]?
A
[0, 1, 2]B
[-1, -1, -1]C
[0, -1, 2]D
[-1, 1, -1]Правильный ответ. Тернарное выражение
x if cond else y подставляет одно из двух значений на каждом шаге списочного включения.Разбор
В выражении [x if x % 2 == 0 else -1 for x in vals] для каждого x проверяется условие: если чётное — оставляем x, иначе подставляем -1. Для vals = [0, 1, 2] получится [0, -1, 2]. Это не фильтр: длина результата всегда равна длине исходного списка. Вариант [-1, 1, -1] соответствовал бы инвертированному условию (заменять чётные, оставлять нечётные), а [-1, -1, -1] — постоянной замене без проверки.
Проверь себя · 1/3разбор после ответа
У вас есть список словарей
users с ключами id и is_active. Нужно получить список идентификаторов только активных пользователей. Какое решение обычно проще читать, чем комбинация map и filter с анонимными функциями?Ещё вопросы по теме «Генераторы списков и встроенные функции»
- Дан список `xs = [1, -2, 3, 0]`. Что вернёт выражение `[x * 2 for x in xs if x > 0]`?
- Есть список словарей `users`, где у некоторых пользователей отсутствует email (например, `u.get("email")` возвращает `None`). Нужно получить список email в нижнем регистре, пропуская отсутствующие. Какой вариант обычно наиболее читаемый?
- Дан список батчей `batches = [[101, 102], [], [103]]`. Что вернёт выражение `[x for batch in batches for x in batch]`?
- У вас есть список словарей `users` с ключами `id` и `is_active`. Нужно получить список идентификаторов только активных пользователей. Какое решение обычно проще читать, чем комбинация `map` и `filter` с анонимными функциями?
- У вас уже есть функция `normalize_email`, которая принимает строку и возвращает строку. Нужно применить её к списку `emails` и получить новый список. Какой вариант наиболее уместен и читаем?
- Все вопросы по «Генераторы списков и встроенные функции» →