Результат работы filter с None над списком

Будет выведено [10, '5', True]. filter(None, items) оставляет элементы, истинные при преобразовании к bool, и удаляет пустую строку, ноль, None и False.

Короткий ответ

Что ответить на собеседовании

Будет выведено [10, '5', True]. filter(None, items) оставляет элементы, истинные при преобразовании к bool, и удаляет пустую строку, ноль, None и False.

Подробный разбор

Ответ с пояснениями

Условие

Какой вывод будет получен после выполнения следующей программы? Выберите один вариант из предложенных:

  • возникнет ошибка
  • [10, '5', '', 0, None, True, False]
  • [10, '5', True]
  • [10, '5', None, True]
items = [10, '5', '', 0, None, True, False]
filtered = list(filter(None, items))
print(filtered)

Ответ

Будет выведено [10, '5', True]. filter(None, items) оставляет элементы, истинные при преобразовании к bool, и удаляет пустую строку, ноль, None и False.

Аргумент None означает использование стандартной проверки истинности, а не фильтрацию только None. Поэтому сохраняются и число 10, и непустая строка '5', и True.

filtered = [item for item in items if item]

Этот comprehension даёт тот же результат. filter возвращает ленивый итератор, который list полностью вычисляет. Если нужно удалить исключительно None, пишите item is not None: тогда нули, пустые строки и False должны остаться.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее