Есть список строк raw = ["10", "", "3"]. Нужно получить список целых чисел только из непустых строк. Какой вариант корректен и читаем?
A
[int(x) for x in raw]B
list(filter(None, map(int, raw)))C
list(filter(int, raw))D
[int(x) for x in raw if x]Правильный ответ. Сначала отбрасываем пустые строки фильтром
if x, затем превращаем оставшиеся в числа через int(x).Разбор
[int(x) for x in raw if x] сначала отсеивает пустые строки (для них bool("") = False), и только потом вызывает int(x) — поэтому исключения не будет. [int(x) for x in raw] без фильтра пытается преобразовать пустую строку и падает с ValueError. Вариант с filter(None, map(int, raw)) тоже сначала вызывает int() для всех элементов и падает на пустой строке. list(filter(int, raw)) использует int как предикат к строкам и не приводит их к числу, а также падает с ошибкой при пустой строке.
Проверь себя · 1/3разбор после ответа
Нужно проверить, что все значения в списке
prices строго положительные. Какое выражение вернёт True только если каждый элемент больше нуля?Ещё вопросы по теме «Генераторы списков и встроенные функции»
- Дан список `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` с анонимными функциями?
- Все вопросы по «Генераторы списков и встроенные функции» →