🐛 Типичные ошибки

⚡ Топ-3 ошибки

  • Забыть преобразовать filter или map в список.
  • Путать sort() (изменяет список) и sorted() (возвращает новый).
  • Не добавлять начальное значение в reduce и получать ошибку на пустом списке.

❌ Ошибка 1: Не преобразовать результат filter в список

# Неправильно
nums = [1, 2, 3, 4, 5, 6]
evens = filter(lambda x: x % 2 == 0, nums)
print(evens)  # <filter object at 0x...>

Почему возникает: filter возвращает ленивый итератор, а не готовый список.

✅ Исправление

# Правильно
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens)  # [2, 4, 6]

❌ Ошибка 2: Путать sort() и sorted()

# Неправильно
words = ["apple", "banana", "kiwi", "grape"]
result = words.sort(key=len)
print(result)  # None — метод sort ничего не возвращает

Почему возникает: list.sort() сортирует список на месте и возвращает None.

✅ Исправление

# Правильно
result = sorted(words, key=len)
print(result)  # ['kiwi', 'grape', 'apple', 'banana']

❌ Ошибка 3: Забыть начальное значение в reduce

# Неправильно
from functools import reduce
numbers = []
product = reduce(lambda a, b: a * b, numbers)
print(product)  # TypeError: reduce() of empty iterable with no initial value

Почему возникает: без начального значения reduce не может обработать пустую коллекцию.

✅ Исправление

# Правильно
product = reduce(lambda a, b: a * b, numbers, 1)
print(product)  # 1

❌ Ошибка 4: Изменять исходный словарь вместо создания нового

# Неправильно
def schedule_within_limit(tasks, time_limit):
    tasks.clear()  # изменяет оригинал!
    return tasks

Почему возникает: функция вносит побочный эффект, который может сломать код, вызывающий функцию.

✅ Исправление

# Правильно
def schedule_within_limit(tasks, time_limit):
    selected = {}
    # ... наполняем selected, не трогая tasks
    return selected

❌ Ошибка 5: Неправильно вычислять ключ сортировки

# Неправильно
words = ["banana", "kiwi", "grapefruit", "apple"]
sorted_words = sorted(words, key=sum(ord(c) for c in words[0]))

Почему возникает: в key нужно передавать функцию, а не результат вычисления для одного элемента.

✅ Исправление

# Правильно
sorted_words = sorted(words, key=lambda word: sum(ord(c) for c in word))

❌ Ошибка 6: Слишком сложная lambda

# Неправильно: трудно читать
result = sorted(data, key=lambda x: (sum([ord(c) for c in x[0]]) if isinstance(x[0], str) else x[0]) if x else 0)

Почему возникает: сложная лямбда хуже читается, чем обычная функция def.

✅ Исправление

# Правильно
def compute_key(item):
    if not item:
        return 0
    value = item[0]
    if isinstance(value, str):
        return sum(ord(c) for c in value)
    return value

result = sorted(data, key=compute_key)