Есть список строк raw = ["10", "", "3"]. Нужно получить список целых чисел только из непустых строк. Какой вариант корректен и читаем?

A[int(x) for x in raw]
Blist(filter(None, map(int, raw)))
Clist(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 только если каждый элемент больше нуля?
Тренировать Python в Telegram

Ещё вопросы по теме «Генераторы списков и встроенные функции»