Нужно получить список строк без пустых значений из items. Вы решили использовать filter(), и хотите избежать лишнего lambda. Какой вариант лучше?
A
list(filter(lambda x: x, items))B
list(filter(None, items))C
list(map(None, items))D
list(items.filter(None))Правильный ответ.
filter(None, items) оставляет только истинные значения, а list(...) сразу собирает их в список — без лишней lambda.Разбор
При первом аргументе None функция filter использует встроенный тест на «истинность» каждого элемента — это эквивалент lambda x: x, но без явной обёртки. list(filter(None, items)) сразу возвращает список, как просили. Вариант с lambda x: x делает то же самое, но добавляет лишнюю функцию. У map None в качестве функции — устаревшая форма, в Python 3 это вызовет TypeError. У списка items нет метода .filter(), такой вызов поднимет AttributeError.
Проверь себя · 1/3разбор после ответа
Есть список булевых результатов проверок качества данных
checks. Какое выражение наиболее прямо отвечает на вопрос «все проверки прошли»?Ещё вопросы по теме «Генераторы списков и встроенные функции»
- Дан список `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` с анонимными функциями?
- Все вопросы по «Генераторы списков и встроенные функции» →