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