✅ Решения

⚡ Кратко: решения

Функцию передают без скобок: square, а не square().

Lambda - короткая анонимная функция из одного выражения.

Функции высшего порядка принимают или возвращают другие функции.

map() преобразует элементы, filter() отбирает элементы, reduce() сводит коллекцию к одному значению.

any() возвращает True при хотя бы одном истинном элементе.

all() возвращает True, если все элементы истинны; для пустой коллекции это True.

sorted(), min() и max() принимают key-функцию для критерия сравнения.

Сложную lambda лучше заменить именованной функцией def.

Топ-3 ошибки: передать результат функции вместо ссылки; забыть list() вокруг map/filter; писать слишком сложную lambda вместо понятной функции.

Решение 1. Квадраты

def square_numbers(numbers):
    return list(map(lambda x: x ** 2, numbers))

print(square_numbers([1, 2, 3, 4, 5]))

map применяет lambda к каждому числу, list материализует результат.

Решение 2. Сортировка по возрасту

def sort_by_age(people):
    return sorted(people, key=lambda person: person[1])

people = [("Mike", 19), ("Nancy", 35), ("Charlie", 23), ("Oscar", 33)]
print(sort_by_age(people))

Ключ сортировки - второй элемент кортежа.

Решение 3. Сортировка по возрасту и имени

def sort_by_age_and_name(people):
    return sorted(people, key=lambda person: (-person[1], person[0]))

people = [("Mike", 19), ("Nancy", 35), ("Oscar", 33), ("Frank", 33)]
print(sort_by_age_and_name(people))

Отрицательный возраст даёт убывание, имя остаётся по алфавиту.

Решение 4. Сотрудники

def process_employees(employees):
    filtered = filter(lambda emp: emp["age"] > 30, employees)
    updated = map(lambda emp: {**emp, "salary": emp["salary"] * 1.2}, filtered)
    return list(updated)

employees = [
    {"name": "Alice", "age": 25, "salary": 50000},
    {"name": "Bob", "age": 35, "salary": 60000},
    {"name": "Charlie", "age": 40, "salary": 70000},
]
print(process_employees(employees))

{**emp, ...} создаёт новый словарь сотрудника и не меняет исходный.