Есть список словарей 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
any(u.get("email") for u in users)D
{u["email"].lower() for u in users if u.get("email")}Правильный ответ. Комбинация фильтрации и преобразования часто читается проще в одной list comprehension, чем через вложенные
map()/filter() с lambda.Разбор
List comprehension сразу показывает намерение: «возьми email и приведи к нижнему регистру для каждого пользователя, у которого есть email». Вариант с map() и filter() плюс два lambda усложняет чтение: приходится разбирать вложенные вызовы, чтобы понять порядок действий.
Проверь себя · 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`. Нужно получить список `id` только активных пользователей. Какое решение обычно проще читать, чем комбинация `map()` + `filter()` с `lambda`?
- У вас уже есть функция `normalize_email` (принимает строку и возвращает строку). Нужно применить её к списку `emails` и получить новый `list`. Какой вариант можно считать уместным и читаемым?
- Все вопросы по «Генераторы списков и встроенные функции» →