Назад к задачам
Junior — Senior
4

Почему возникает TypeError при проверке длины результата filter

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Объясните, почему в приведённом примере появляется исключение 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().

Как исправить:

  1. Преобразовать результат в список: odd_numbers = list(filter(lambda x: x % 2, nums)).
  2. Или воспользоваться генератором списков: odd_numbers = [x for x in nums if x % 2].
  3. Если нужна только проверка наличия хотя бы одного нечётного элемента, можно использовать any: print(any(x % 2 for x in nums)). Все варианты устраняют ошибку, позволяя корректно проверить, есть ли нечётные числа в исходном массиве.