Функция max(): синтаксис, параметры, примеры
Встроенная функция 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