У вас есть список словарей users с ключами id и is_active. Нужно получить список идентификаторов только активных пользователей. Какое решение обычно проще читать, чем комбинация map и filter с анонимными функциями?
A
map(lambda u: u["id"], filter(lambda u: u["is_active"], users))B
[u["id"] for u in users if u.get("is_active")]C
{u["id"]: u for u in users if u.get("is_active")}D
[u for u in users if u.get("is_active") == True]Правильный ответ. Списочное включение
[u["id"] for u in users if u.get("is_active")] напрямую возвращает список идентификаторов активных пользователей.Разбор
Целевой результат — это список значений id, поэтому подходит обычное списочное включение с фильтром по is_active. Связка map() + filter() даёт похожий результат, но возвращает ленивый итератор и читается тяжелее из-за двух lambda. Конструкция с двоеточием в фигурных скобках — это словарь по id, а не список. Вариант [u for u in users if ...] собирает целиком сами словари пользователей, а не их идентификаторы.
Проверь себя · 1/3разбор после ответа
Есть список строк
raw = ["10", "", "3"]. Нужно получить список целых чисел только из непустых строк. Какой вариант корректен и читаем?Ещё вопросы по теме «Генераторы списков и встроенные функции»
- Дан список `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]`?
- Дан список `vals = [0, 1, 2]`. Что вернёт выражение `[x if x % 2 == 0 else -1 for x in vals]`?
- У вас уже есть функция `normalize_email`, которая принимает строку и возвращает строку. Нужно применить её к списку `emails` и получить новый список. Какой вариант наиболее уместен и читаем?
- Все вопросы по «Генераторы списков и встроенные функции» →