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