Функция max(): синтаксис, параметры, примеры

Раздел: Python -> Встроенные функции

Встроенная функция max() в Python предназначена для нахождения наибольшего элемента из переданной последовательности или набора аргументов. Функция принимает как позиционные аргументы (сравниваемые объекты), так и итерируемый объект, а также поддерживает параметр key для настройки критерия сравнения и параметр default для обработки пустого итерируемого.

Основное использование функции max

Наиболее простой способ - передать несколько чисел или строк в качестве аргументов:

max(3, 7, 2, 9, 5)

Python max (функция max в python)

9

функция bin python (встроенная функция bin() в python)

Или передать итерируемый объект (список, кортеж, строку):

max([3, 7, 2, 9, 5])

Python id name (использование id() и name в python)

9

команда open в python (команда open для открытия файлов в python)

Для строк функция сравнивает лексикографически:

max("apple", "banana", "cherry")

Enumerate python (функция enumerate в python)

'cherry'

функция sum в python (функция sum в python)

Если передать пустой итерируемый объект без параметра default, возникнет ошибка ValueError: max() arg is an empty sequence. Для предотвращения используйте аргумент default.

max([], default=0)

функция zip в python (функция zip в python)

0

минимальное целое число python (минимальное целое число)

Как найти элемент с наиболее длинным именем в списке строк?

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

words = ["apple", "banana", "cherry", "date"]
max(words, key=len)
'banana'

Аналогично для поиска максимального числа по модулю:

numbers = [-10, -5, 0, 15, -20]
max(numbers, key=abs)
-20

Важно: key не изменяет исходные значения, а только влияет на сравнение.

Как сравнить экземпляры собственного класса?

Для пользовательских классов необходимо определить методы сравнения, например __lt__ или __gt__, либо передать key, возвращающий атрибут для сравнения.

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __repr__(self):
        return f"{self.name}({self.age})"

people = [Person("Alice", 30), Person("Bob", 25), Person("Charlie", 35)]
oldest = max(people, key=lambda p: p.age)
print(oldest)
Charlie(35)

Без key Python попытается сравнить объекты напрямую, что вызовет TypeError: '<' not supported between instances, если не определены методы сравнения.

Ошибка: если класс не реализует __lt__ или __gt__, max не сможет сравнить объекты. Решение: либо определить метод __lt__, либо использовать key.

Что вернуть, если последовательность пуста?

Используйте параметр default:

max([], default="пусто")
'пусто'

Если default не задан, Python выбрасывает ValueError. Это особенно полезно при работе с динамическими данными.

Как определить ключ с наибольшим значением в словаре?

По умолчанию max на итерируемом словаре сравнивает ключи. Чтобы сравнить значения, используйте key=dict.get:

scores = {"Alice": 85, "Bob": 92, "Charlie": 78}
max_key = max(scores, key=scores.get)
print(max_key)
Bob

max_value = max(scores.values()) # 92

Как отсортировать несколько списков по сумме элементов?

Передайте несколько итерируемых объектов как аргументы и укажите key:

list1 = [1, 2, 3]
list2 = [4, 5]
list3 = [6]
result = max(list1, list2, list3, key=sum)
print(result)
[4, 5]

Здесь сравниваются сами списки, а key=sum применяется перед сравнением. Обратите внимание: max возвращает один из переданных объектов, а не сумму.

Как обработать поток данных на лету?

max можно применить к генератору, но после прохода итератор становится пустым. Пример:

gen = (x*2 for x in range(10))
print(max(gen))
18

Будьте осторожны: повторный вызов max на том же генераторе вернет ошибку, так как итератор исчерпан. Решение - сохранить данные в список при необходимости многократного использования.

Как найти элемент с максимальной площадью прямоугольника?

rectangles = [(3,4), (5,2), (6,1)]
max_rect = max(rectangles, key=lambda r: r[0]*r[1])
print(max_rect)
(3,4)

key может быть любой функцией, включая lambda, operator.itemgetter, или пользовательскую функцию.

Пример 1: max с пользовательским классом, определившим __lt__

В этом примере класс Book реализует метод __lt__, что позволяет max напрямую сравнивать объекты по числу страниц.

Пример
class Book:
    def __init__(self, title, pages):
        self.title = title
        self.pages = pages
    def __lt__(self, other):
        return self.pages < other.pages
    def __repr__(self):
        return self.title

books = [Book("A", 200), Book("B", 150), Book("C", 300)]
thickest = max(books)
print(thickest)
C

Пример 2: max с operator.itemgetter для кортежей

Библиотека operator предоставляет удобные инструменты для извлечения элементов. itemgetter часто используется с key.

Пример
from operator import itemgetter
students = [("Alice", 90), ("Bob", 85), ("Charlie", 95)]
top = max(students, key=itemgetter(1))
print(top)
('Charlie', 95)

Пример 3: max с фильтрацией значений None

Если данные содержат None, их необходимо отфильтровать, иначе возникнет TypeError. Используйте генератор с условием.

Пример
values = [3, None, 7, None, 1]
filtered = (v for v in values if v is not None)
print(max(filtered, default=0))
7

Пример 4: max с несколькими критериями (длина, затем лексикографически)

Лямбда может возвращать кортеж для последовательного сравнения по нескольким атрибутам.

Пример
words = ["cat", "elephant", "dog", "bird"]
max_word = max(words, key=lambda w: (len(w), w))
print(max_word)
elephant

Пример 5: max с датами и дефолтным значением

Функция max корректно работает с объектами datetime, поддерживающими сравнение.

Пример
import datetime
dates = [datetime.date(2023,5,1), datetime.date(2024,1,15), datetime.date(2022,12,25)]
latest = max(dates)
print(latest)
2024-01-15

Пример 6: max с map и len для получения наибольшей длины

max может применяться к результату map, образуя конвейер обработки.

Пример
words = ["apple", "banana", "cherry"]
max_len = max(map(len, words))
print(max_len)
6

Функция max в Python - comments

En
Python max (python)