❌ Ошибка 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)