Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
4
Почему возникает TypeError при проверке длины результата filter
Условие задачи
Объясните, почему в приведённом примере появляется исключение TypeError и предложите способы его устранения.
nums = [1, 2, 3, 4, 5]
# Формируем список нечётных чисел из nums
odd_numbers = filter(lambda x: x % 2, nums)
print(len(odd_numbers) > 0) # TypeError
Причина: в Python 3 функция filter возвращает итератор, а не список. У итератора нет метода __len__, поэтому вызов len() приводит к TypeError: object of type 'filter' has no len().
Как исправить:
- Преобразовать результат в список:
odd_numbers = list(filter(lambda x: x % 2, nums)). - Или воспользоваться генератором списков:
odd_numbers = [x for x in nums if x % 2]. - Если нужна только проверка наличия хотя бы одного нечётного элемента, можно использовать
any:print(any(x % 2 for x in nums)). Все варианты устраняют ошибку, позволяя корректно проверить, есть ли нечётные числа в исходном массиве.