Будет выведено [10, '5', True]. filter(None, items) оставляет элементы, истинные при преобразовании к bool, и удаляет пустую строку, ноль, None и False.
Результат работы filter с None над списком
Будет выведено [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 должны остаться.