В этой статье мы научимся находить максимальное значение в списке на Python. Для всестороннего понимания вопроса мы рассмотрим использование некоторых встроенных функций, простые подходы, а также небольшие реализации известных алгоритмов.
Сначала давайте вкратце рассмотрим, что такое список в Python и как найти в нем максимальное значение или просто наибольшее число.
В Python есть встроенный тип данных под названием список (list). По своей сути он сильно напоминает массив. Но в отличие от последнего данные внутри списка могут быть любого типа (необязательно одного): он может содержать целые числа, строки или значения с плавающей точкой, или даже другие списки.
Хранимые в списке данные определяются как разделенные запятыми значения, заключенные в квадратные скобки. Списки можно определять, используя любое имя переменной, а затем присваивая ей различные значения в квадратных скобках. Он является упорядоченным, изменяемым и допускает дублирование значений. Например:
list1 = ["Виктор", "Артем", "Роман"]
list2 = [16, 78, 32, 67]
list3 = ["яблоко", "манго", 16, "вишня", 3.4]
Далее мы рассмотрим возможные варианты кода на Python, реализующего поиск наибольшего элемента в списке, состоящем из сравниваемых элементов. В наших примерах будут использоваться следующие методы/функции:
- Встроенная функция
max()
- Метод грубой силы (перебора)
- Функция
reduce()
- Алгоритм Heap Queue (очередь с приоритетом)
- Функция
sort()
- Функция
sorted()
- Метод хвостовой рекурсии
№1 Нахождение максимального значения с помощью функции max()
Это самый простой и понятный подход к поиску наибольшего элемента. Функция Python max()
возвращает самый большой элемент итерабельного объекта. Ее также можно использовать для поиска максимального значения между двумя или более параметрами.
В приведенном ниже примере список передается функции max в качестве аргумента.
list1 = [3, 2, 8, 5, 10, 6]
max_number = max(list1)
print("Наибольшее число:", max_number)
Наибольшее число: 10
Если элементы списка являются строками, то сначала они упорядочиваются в алфавитном порядке, а затем возвращается наибольшая строка.
list1 = ["Виктор", "Артем", "Роман"]
max_string = max(list1, key=len)
print("Самая длинная строка:", max_string)
Самая длинная строка: Виктор
№2 Поиск максимального значения перебором
Это самая простая реализация, но она немного медленнее, чем функция max()
, поскольку мы используем этот алгоритм в цикле.
В примере выше для поиска максимального значения нами была определена функция large()
. Она принимает список в качестве единственного аргумента. Для сохранения найденного значения мы используем переменную max_
, которой изначально присваивается первый элемент списка. В цикле for каждый элемент сравнивается с этой переменной. Если он больше max_
, то мы сохраняем значение этого элемента в нашей переменной. После сравнения со всеми членами списка в max_
гарантировано находится наибольший элемент.
def large(arr):
max_ = arr[0]
for ele in arr:
if ele > max_:
max_ = ele
return max_
list1 = [1,4,5,2,6]
result = large(list1)
print(result) # вернется 6
№3 Нахождение максимального значения с помощью функции reduce()
В функциональных языках reduce()
является важной и очень полезной функцией. В Python 3 функция reduce()
перенесена в отдельный модуль стандартной библиотеки под названием functools. Это решение было принято, чтобы поощрить разработчиков использовать циклы, так как они более читабельны. Рассмотрим приведенный ниже пример использования reduce()
двумя разными способами.
В этом варианте reduce()
принимает два параметра. Первый — ключевое слово max, которое означает поиск максимального числа, а второй аргумент — итерабельный объект.
from functools import reduce
list1 = [-1, 3, 7, 99, 0]
print(reduce(max, list1)) # вывод: 99
Другое решение показывает интересную конструкцию с использованием лямбда-функции. Функция reduce()
принимает в качестве аргумента лямбда-функцию, а та в свою очередь получает на вход условие и список для проверки максимального значения.
from functools import reduce
list1 = [-1, 3, 7, 99, 0]
print(reduce(lambda x, y: x if x > y else y, list1)) # -> 99
№4 Поиск максимального значения с помощью приоритетной очереди
Heapq — очень полезный модуль для реализации минимальной очереди. Если быть более точным, он предоставляет реализацию алгоритма очереди с приоритетом на основе кучи, известного как heapq. Важным свойством такой кучи является то, что ее наименьший элемент всегда будет корневым элементом. В приведенном примере мы используем функцию heapq.nlargest()
для нахождения максимального значения.
import heapq
list1 = [-1, 3, 7, 99, 0]
print(heapq.nlargest(1, list1)) # -> [99]
Приведенный выше пример импортирует модуль heapq и принимает на вход список. Функция принимает n=1
в качестве первого аргумента, так как нам нужно найти одно максимальное значение, а вторым аргументом является наш список.
№5 Нахождение максимального значения с помощью функции sort()
Этот метод использует функцию sort()
для поиска наибольшего элемента. Он принимает на вход список значений, затем сортирует его в порядке возрастания и выводит последний элемент списка. Последним элементом в списке является list[-1]
.
list1 = [10, 20, 4, 45, 99]
list1.sort()
print("Наибольшее число:", list1[-1])
Наибольшее число: 99
№6 Нахождение максимального значения с помощью функции sorted()
Этот метод использует функцию sorted()
для поиска наибольшего элемента. В качестве входных данных он принимает список значений. Затем функция sorted()
сортирует список в порядке возрастания и выводит наибольшее число.
list1=[1,4,22,41,5,2]
sorted_list = sorted(list1)
result = sorted_list[-1]
print(result) # -> 41
№7 Поиск максимального значения с помощью хвостовой рекурсии
Этот метод не очень удобен, и иногда программисты считают его бесполезным. Данное решение использует рекурсию, и поэтому его довольно сложно быстро понять. Кроме того, такая программа очень медленная и требует много памяти. Это происходит потому, что в отличие от чистых функциональных языков, Python не оптимизирован для хвостовой рекурсии, что приводит к созданию множества стековых фреймов: по одному для каждого вызова функции.
def find_max(arr, max_=None):
if max_ is None:
max_ = arr.pop()
current = arr.pop()
if current > max_:
max_ = current
if arr:
return find_max(arr, max_)
return max_
list1=[1,2,3,4,2]
result = find_max(list1)
print(result) # -> 4
Заключение
В этой статье мы научились находить максимальное значение из заданного списка с помощью нескольких встроенных функций, таких как max()
, sort()
, reduce()
, sorted()
и других алгоритмов. Мы написали свои код, чтобы попробовать метод перебора, хвостовой рекурсии и алгоритма приоритетной очереди.
На чтение 6 мин Просмотров 2.3к. Опубликовано
Python — это язык программирования, который широко используется в различных областях. В работе с данными и в анализе данных очень часто возникает необходимость найти максимальное число в списке. В этой статье мы рассмотрим различные способы нахождения максимального числа в списке в Python.
Содержание
- Методы для нахождения максимального числа в списке
- Использование цикла for и условного оператора
- Использование встроенной функции max()
- Использование метода sort()
- Использование функции sorted()
- Обработка исключений при поиске максимального числа
- Заключение
Методы для нахождения максимального числа в списке
В Python есть несколько способов найти максимальное число в списке. Мы рассмотрим наиболее распространенные методы:
- Использование цикла for для перебора элементов списка.
- Использование встроенной функции max()
- Использование метода sort()
- Использование функции sorted()
Каждый из этих методов имеет свои особенности, и выбор определенного метода зависит от контекста использования и особенностей задачи. Рассмотрим каждый из методов более подробно.
Вам может быть интересно: Как найти максимальное число в списке Python
Использование цикла for и условного оператора
Использование цикла for и условного оператора — один из наиболее простых и понятных способов нахождения максимального числа в списке Python.
Суть метода заключается в том, что мы проходим циклом по элементам списка и сравниваем их между собой. Если очередной элемент больше, чем предыдущий максимум, то мы сохраняем его как новый максимум.
Вот пример кода, который иллюстрирует этот метод:
# Исходный список чисел
numbers = [12, 45, 67, 23, 56, 8, 91]
# Инициализация переменной max_number
max_number = numbers[0]
# Цикл for для прохода по всем элементам списка
for number in numbers:
if number > max_number:
max_number = number
# Вывод максимального числа
print("Максимальное число в списке:", max_number)
В этом примере мы проходим циклом for
по всем элементам списка numbers
и сравниваем каждый элемент с переменной max_number
, которая изначально инициализирована первым элементом списка. Если текущий элемент больше, чем значение max_number
, мы обновляем значение max_number
на текущий элемент. В конце цикла мы выводим максимальное число.
Этот метод может быть использован для любого типа элементов списка, который можно сравнивать оператором «>». Он также может быть легко изменен для нахождения минимального числа в списке, заменив оператор «>» на «<«.
Хотя этот метод является простым, он может быть неэффективным для очень больших списков. Для более эффективного решения этой задачи можно использовать встроенную функцию max(), которая работает быстрее для больших списков.
Использование встроенной функции max()
Python предоставляет встроенную функцию max()
, которая принимает любое количество аргументов и возвращает наибольшее значение. Для того чтобы найти максимальное значение в списке, можно передать в функцию список целиком.
Пример использования функции max()
для нахождения максимального числа в списке:
my_list = [1, 3, 5, 2, 4]
max_number = max(my_list)
print(max_number) # выводит 5
Здесь мы создаем список my_list
, содержащий пять чисел. Затем мы вызываем функцию max()
и передаем ей весь список, который возвращает максимальное число. Наконец, мы выводим результат на экран.
Преимуществом использования функции max()
является ее простота и читаемость. Вместо написания цикла или сложных условий, мы можем использовать одну функцию, которая выполняет всю необходимую работу за нас.
Использование метода sort()
Метод sort()
является методом списка, который может быть использован для сортировки элементов списка в порядке возрастания или убывания. Однако, после сортировки можно легко найти максимальный или минимальный элемент в списке.
Для того, чтобы найти максимальный элемент в списке, можно отсортировать его в порядке убывания, используя метод sort()
с параметром reverse=True
. Затем, первый элемент списка будет максимальным.
Вот пример использования метода sort()
для нахождения максимального числа в списке:
numbers = [4, 7, 2, 9, 1, 5]
numbers.sort(reverse=True)
max_number = numbers[0]
print(max_number)
Этот код сначала сортирует список numbers
в порядке убывания, используя метод sort()
с параметром reverse=True
. Затем максимальное число в списке будет первым элементом списка после сортировки, который затем присваивается переменной max_number
. В выводе мы получаем максимальное число, которое равно 9.
Однако, важно помнить, что метод sort()
изменяет исходный список, поэтому, если необходимо сохранить порядок элементов в списке, лучше использовать другой метод для нахождения максимального числа.
Использование функции sorted()
Иногда нужно не только найти максимальный элемент списка, но и получить список, отсортированный по возрастанию или убыванию. В этом случае удобно использовать функцию sorted()
.
Функция sorted()
возвращает отсортированный список из переданного ей списка. В отличие от метода sort()
, функция sorted()
не изменяет исходный список, а возвращает новый отсортированный список.
Пример использования функции sorted()
для нахождения максимального числа в списке и получения списка, отсортированного по убыванию:
numbers = [5, 10, 2, 8, 7]
max_number = sorted(numbers, reverse=True)[0]
sorted_numbers_descending = sorted(numbers, reverse=True)
print(max_number) # 10
print(sorted_numbers_descending) # [10, 8, 7, 5, 2]
В этом примере мы передали список numbers
в функцию sorted()
и использовали параметр reverse=True
для получения списка, отсортированного по убыванию. Затем мы получили максимальный элемент этого списка, обращаясь к его первому элементу [0]
.
Обработка исключений при поиске максимального числа
При написании программы на Python важно учитывать возможность возникновения ошибок во время выполнения программы. Если в списке нет элементов, то использование функций, которые возвращают максимальное значение, может вызвать ошибку. Для обработки таких ситуаций необходимо использовать механизм исключений.
В Python исключения обрабатываются с помощью конструкции try-except. В блоке try мы выполняем код, который может привести к ошибке, а в блоке except мы определяем, как обрабатывать возможное исключение.
Например, если мы используем функцию max() для пустого списка, Python выдаст исключение типа ValueError. Чтобы избежать такой ошибки, мы можем обернуть вызов функции max() в блок try-except и обработать исключение:
my_list = []
try:
max_value = max(my_list)
print("Максимальное значение в списке:", max_value)
except ValueError:
print("Список пуст.")
В этом примере мы создаем пустой список my_list, затем вызываем функцию max() для нахождения максимального значения. Если список пуст, Python выдаст исключение ValueError, которое мы обрабатываем в блоке except и выводим соответствующее сообщение.
При обработке исключений важно учитывать конкретный тип исключения, который может быть выброшен, чтобы обработать его правильно. Если мы не укажем конкретный тип исключения в блоке except, то будут обрабатываться все исключения, что может привести к непредсказуемому поведению программы.
my_list = []
try:
max_value = max(my_list)
print("Максимальное значение в списке:", max_value)
except Exception as e:
print("Произошла ошибка:", e)
В этом примере мы используем общий тип исключения Exception, чтобы обработать любые возможные исключения. Однако такой подход не рекомендуется, так как мы не можем точно определить, какое исключение произошло, и как его обработать. Лучше всего использовать конкретные типы исключений, чтобы программа была более надежной и стабильной.
Заключение
В этой статье мы рассмотрели различные методы нахождения максимального числа в списке Python. Мы изучили, как использовать циклы и условные операторы, а также встроенные функции и методы для нахождения максимального значения. Мы также обсудили возможные проблемы, связанные с обработкой исключений при поиске максимального числа.
Надеемся, что эта статья была полезной для вас и поможет вам выбрать наиболее эффективный и удобный метод для нахождения максимального числа в ваших списках.
Функция Python min() возвращает наименьший элемент в итерации. Его также можно использовать для поиска наименьшего элемента между двумя или более параметрами.
Функция имеет две формы:
// to find the smallest item in an iterable min(iterable, *iterables, key, default) // to find the smallest item between two or more objects min(arg1, arg2, *args, key)
С повторяемыми аргументами
Чтобы найти наименьший элемент в итерации, мы используем следующий синтаксис:
min(iterable, *iterables, key, default)
Параметры
- iterable ‒ итерируемый объект, такой как список, кортеж, набор, словарь и т. д.;
- * iterables (необязательно) ‒ любое количество итераций, может быть более одного;
- key (необязательно) ‒ ключевая функция, в которую передаются итерации, и выполняется сравнение на основе ее возвращаемого значения;
- default (необязательно) ‒ значение по умолчанию, если данная итерация пуста.
Как получить наименьший элемент в списке?
number = [3, 2, 8, 5, 10, 6] smallest_number = min(number); print("The smallest number is:", smallest_number)
Выход
The smallest number is: 2
Если элементы в итеративном элементе являются строками, возвращается наименьший элемент (упорядоченный в алфавитном порядке).
Пример: Наименьшая строка в списке
languages = ["Python", "C Programming", "Java", "JavaScript"] smallest_string = min(languages); print("The smallest string is:", smallest_string)
Выход
The smallest string is: C Programming
В случае словарей команда возвращает наименьший ключ. Давайте воспользуемся ключевым параметром, чтобы найти ключ словаря с наименьшим значением.
На примере в словарях
square = {2: 4, 3: 9, -1: 1, -2: 4} # the smallest key key1 = min(square) print("The smallest key:", key1) # -2 # the key whose value is the smallest key2 = min(square, key = lambda k: square[k]) print("The key with the smallest value:", key2) # -1 # getting the smallest value print("The smallest value:", square[key2]) # 1
Выход
The smallest key: -2 The key with the smallest value: -1 The smallest value: 1
Во второй функции мы передали лямбда-функцию ключевому параметру.
key = lambda k: square[k]
Функция возвращает значения словарей. На основе значений (а не ключей словаря) вычисляется ключ, имеющий минимальное значение.
Несколько заметок:
- Если мы передаем пустой итератор, возникает исключение ValueError. Чтобы этого избежать, мы можем передать параметр по умолчанию.
- Если мы передаем более одного итератора, возвращается наименьший элемент из данных итераторов.
Без итерации
Чтобы найти наименьший элемент между двумя или более параметрами, мы можем использовать этот синтаксис:
min(arg1, arg2, *args, key)
Параметры
- арг1 ‒ объект, могут быть числами, строками и т. д.;
- арг2 ‒ объект, могут быть числами, строками и т. д.;
- * args (необязательно) ‒ любое количество объектов;
- key (необязательно) ‒ ключевая функция, в которую передается каждый аргумент, и сравнение выполняется на основе его возвращаемого значения.
По сути, функция min() может найти наименьший элемент между двумя или более объектами.
Как найти минимум среди заданных чисел в Python?
result = min(4, -5, 23, 5) print("The minimum number is:", result)
Выход
The minimum number is -5
Если вам нужно найти самый большой элемент, вы можете использовать функцию max() в Python.
Функция Python max() возвращает самый большой элемент в итерируемом объекте. Его также можно использовать для поиска самого большого элемента между двумя или более параметрами.
Функция имеет две формы:
// to find the largest item in an iterable max(iterable, *iterables, key, default) // to find the largest item between two or more objects max(arg1, arg2, *args, key)
1 С повторяемыми аргументами
Чтобы найти самый большой элемент в итерации, мы используем следующий синтаксис:
max(iterable, *iterables, key, default)
Параметры
- iterable ‒ итерируемый объект, такой как список, кортеж, набор, словарь и т. д.;
- * iterables (необязательно) ‒ любое количество итераций, может быть более одного;
- key (необязательно) ‒ ключевая функция, в которую передаются итерации, и выполняется сравнение на основе ее возвращаемого значения;
- default (необязательно) ‒ значение по умолчанию, если данная итерация пуста.
Пример 1: Как получить самый большой элемент в списке в Python?
number = [3, 2, 8, 5, 10, 6] largest_number = max(number); print("The largest number is:", largest_number)
Выход
The largest number is: 10
Если элементы в итерируемом элементе являются строками, возвращается самый большой элемент (упорядоченный в алфавитном порядке).
Пример 2: Самая большая строка в списке
languages = ["Python", "C Programming", "Java", "JavaScript"] largest_string = max(languages); print("The largest string is:", largest_string)
Выход
The largest string is: Python
В случае словарей max() возвращает самый большой ключ. Давайте воспользуемся ключевым параметром, чтобы найти ключ словаря, имеющий наибольшее значение.
Пример 3: В словарях
square = {2: 4, -3: 9, -1: 1, -2: 4} # the largest key key1 = max(square) print("The largest key:", key1) # 2 # the key whose value is the largest key2 = max(square, key = lambda k: square[k]) print("The key with the largest value:", key2) # -3 # getting the largest value print("The largest value:", square[key2]) # 9
Выход
The largest key: 2 The key with the largest value: -3 The largest value: 9
Во второй функции мы передали лямбда-функцию ключевому параметру.
key = lambda k: square[k]
Функция возвращает значения словарей. На основе значений (а не ключей словаря) возвращается ключ, имеющий максимальное значение.
Несколько заметок:
- Если мы передаем пустой итератор, возникает исключение ValueError. Чтобы этого избежать, мы можем передать параметр по умолчанию.
- Если мы передаем более одного итератора, возвращается самый большой элемент из данных итераторов.
Без итерации
Чтобы найти самый большой объект между двумя или более параметрами, мы можем использовать этот синтаксис:
max(arg1, arg2, *args, key)
Параметры
- арг1 ‒ объект, могут быть числами, строками и т. д.;
- арг2 ‒ объект, могут быть числами, строками и т. д.;
- * args (необязательно) ‒ любое количество объектов;
- key (необязательно) ‒ ключевая функция, в которую передается каждый аргумент, и сравнение выполняется на основе его возвращаемого значения.
По сути, функция max() находит самый большой элемент между двумя или более объектами.
Пример 4: Найдите максимум среди заданных чисел
result = max(4, -5, 23, 5) print("The maximum number is:", result)
Выход
The maximum number is: 23
241-19cookie-checkФункции min() и max() в Python
В этой статье мы разберем, как найти наибольшее число из трех, а также как найти наибольшее число в целом списке чисел. Будем применять условия и встроенные функции max()
и sort()
.
Как найти наибольшее число из трех введенных
Суть задачи: пользователем вводится три числа, и программа на Python должна найти наибольшее из них.
Допустим, у нас есть три числа: x
, y
и z
. Пусть x = 2
, y = 5
и z = 8
. Очевидно, что наибольшее число из них это z
. Давайте посмотрим, как мы сможем это определить при помощи Python. Разберем три способа.
Способ 1: условия и сравнения
def maximum(x, y, z): if (x >= y) and (x >= z): largest = x elif (y >= x) and (y >= z): largest = y else: largest = z return largest print(maximum(2, 5, 8)) # Результат: # 8
Два других способа связаны с применением встроенной функции max()
, поэтому давайте познакомимся с ней.
Как работает встроенная функция max()
Функция max()
в Python возвращает наибольшее число из переданных ей аргументов и имеет следующий синтаксис: max( x, y, z,..)
. Все параметры здесь являются числами. Примеры использования функции max()
:
print(max(70, 900, 3000)) # 3000 print(max(222, 45, 80)) # 222 print(max(70, 9040, 700)) # 9040 print(max(7022, 9020, 300)) # 9020 print(max(5555, 900, 6)) # 5555
Способ 2: использование функции max()
Функция max()
прекрасно подходит для поиска наибольшего из трех чисел.
x = 2 y = 5 z = 8 print(max(x, y, z)) # Результат: # 8
Метод max()
также используется для нахождения наибольшего числа в списке.
Способ 3: помещение чисел в список и применение max()
Мы также можем найти наибольшее число при помощи списка. Сначала мы инициализируем три переменные x
, y
, z
и добавляем их в список. Затем, используя функцию max()
, мы можем получить наибольшее число из этого списка.
Например:
def maximum(x, y, z): list = [x, y, z] return max(list) x, y, z = 2, 5, 8 print(maximum(x, y, z)) # Результат: # 8
Чтобы найти наибольшее из некоторого количества чисел, можно сперва преобразовать имеющиеся числа в список (скажем, при помощи встроенной функции list()
), а потом найти наибольшее число в списке. Далее у нас есть два пути: отсортировать список или применить уже известную нам функцию max()
.
Поиск наибольшего числа в списке при помощи функции sort()
Функция sort()
по умолчанию сортирует массив в возрастающем порядке. Соответственно, последнее значение и будет наибольшим числом.
lis = [100, 43, 400, 63, 65] lis.sort() print("Largest number in the list is:", lis[-1]) # Результат: # Largest number in the list is 400
Поиск наибольшего числа в списке при помощи функции max()
lis = [100, 43, 400, 63, 65] print("Largest number in the list is:", max(lis)) # Результат: # The largest number in the list is 400
Перевод статьи “Python Program to Find the Largest Among Three Numbers”.
Находит максимальное значение элемента в последовательности.
Синтаксис:
max(iterable, *[, key, default]) max(arg1, arg2, *args[, key])
Параметры:
iterable
– итерируемый объект,key
– должна быть функцией (принимает один аргумент), используется для порядка сравнения элементов итерируемого объекта. Функция вычисляется один раз,default
– значение по умолчанию, если итерируемый объект окажется пустым,arg1...argN
– позиционный аргумент,*args
– список позиционных аргументов.
Возвращаемое значение:
- наибольшее значение объекта.
Описание:
Функция max()
возвращает наибольшее значение элемента итерируемого объекта или самое большое из двух или более переданных позиционных аргументов.
- Если указан один позиционный аргумент, он должен быть итерируемым объектом (список, кортеж, словарь и т.д.).
- Если в функцию передается два или более позиционных аргумента, возвращается самый большой из них.
- В случае, когда максимальное значение имеют сразу несколько аргументов. Возвращает первый по порядку элемент с максимальным значением. Это согласуется с другими инструментами сохранения стабильности сортировки, такими как
sorted(iterable, key=keyfunc, reverse=True)[0]
иheapq.nlargest(1, iterable, key=keyfunc)
Аргумент key
– функция подобная той, которая используется в дополнительном методе списков list.sort()
. Функция принимает один аргумент и используется для упорядочивания элементов.
>>> x = ['4', '11', '6', '31'] # функция `max` сравнивает # числа как строки >>> max(x) '6' # функция 'key=lambda i: int(i)' применяется # к каждому элементу списка 'x', преобразуя # строки в тип 'int' и теперь функция `max` # сравнивает элементы списка как числа. >>> max(x, key=lambda i: int(i)) '31' # или другое применение функции 'key' # выбор списка с наибольшей суммой элементов >>> max([1,2,3,4], [3,4,5], key=sum) [3, 4, 5]
Аргумент default
по умолчанию указывает объект, который нужно вернуть, если предоставленный итерируемый объект пуст. Если итерация пуста и значение по умолчанию не указано, то возникает ошибка ValueError
.
# Значение по умолчанию >>> max([], default=10) 10
Функция max()
сравнивает элементы, используя оператор <
. Поэтому, все передаваемые в них значения должны быть сопоставимы друг с другом и одного типа, иначе бросается исключение TypeError
При передаче в качестве аргумента текстовых строк, байтовых строк или байтовых массивов, а так же списка символов, максимальное значение будет выбираться исходя из порядка следования символов, в таблице соответствующей кодировки.
>>> x = list('abcdifgh') >>> max(x) # 'i'
Изменено в Python 3.8: Аргумент key
может быть None
.
Примеры поиска максимального значения в последовательности.
- Нахождение самой длинной строки в списке строк;
- Нахождение максимального значения в списке строк, записанных как целые числа;
- Нахождения максимального значения в строке, которая состоит из чисел и строк;
- Определение индекса у максимального значения в списке;
- Выбор максимального значения для ключа или значения в словаре;
- Нахождение списка с наибольшей суммой элементов в списке списков;
- Нахождение списка с наибольшим количеством элементов в списке списков.
# использование позиционных аргументов >>> max(5, 3, 6, 5, 6) # 6 # использование в качестве аргумента - список >>> max([1.2, 1.3, 1.5, 2, 5.52]) # 5.52 # комбинирование позиционных аргументов и списка # при передаче списка 'x' происходит его распаковка >>> x = (1.2, 1.3, 1.5, 2, 5.52) >>> max(5, 3, 5, *x) # 5,52
Нахождение самой длинной строки в списке строк.
Найдем самую длинную строку. В качестве ключевой функции используем len()
. Она посчитает количество символов в строке каждого элемента списка строк, а функция max()
выберет максимальное число. Строки можно передать например как позиционные аргументы, так и списком ['Jul', 'John', 'Vicky']
, результат будет тот же.
>>> line = ['Jul', 'John', 'Vicky'] >>> max(line, key=len) # 'Vicky'
Нахождение max()
в списке строк, записанных как целые числа.
Есть список строк чисел и необходимо найти максимум, как если бы они были целыми числами? Если применить функцию max()
к исходному списку “как есть”, то она выберет наибольшее значение списка исходя из лексикографической сортировки. Для нахождения максимума, как числа, применим функцию lambda i: int(i)
в качестве ключа key
, которая “на лету” преобразует элементы списка в целые числа, тогда функция max()
выберет то что нам нужно.
>>> x = ['4', '11', '6', '31'] >>> max(x) # '6' >>> max(x, key = lambda i: int(i)) # '31'
Нахождения max()
в строке, которая состоит из чисел и строк.
Что бы найти максимум в строке, которая состоит из чисел и строк, необходимо сначала разделить исходную строку на список подстрок. Используем приемы, описанные в примерах функции sum()
:
- по разделителю, например пробелу
' '
или';'
методом строкиstr.split()
, - вытащить все цифры из исходной строки при помощи функцией
re.findall()
.
Затем в цикле перебрать полученный список и все строки с цифрами преобразовать в соответствующие числовые типы и уже потом применить функцию
# исходная строка >>> line = '12; 12,5; 14; один; 15.6; два' # способы преобразования строки в список строк # 1 способ по разделителю ';' >>> line.split(';') # ['12', ' 12,5', ' 14', ' один', ' 15.6', ' два'] # 2 способ по регулярному выражению >>> import re >>> match = re.findall(r'[d.?,?]+', line) >>> list(match) # ['12', '12,5', '14', '15.6']
Далее будем работать с более сложным списком, полученным 1 способом, где встречаются слова. И так, имеем список строк с цифрами и другими строками. Стоит задача: преобразовать строки с цифрами в соответствующие числовые типы и отбросить строки со словами, что бы потом найти максимум.
Задача усложняется тем, что вещественные числа в строках записаны как через запятую, так и через точку. Для необходимых проверок и преобразований определим функцию str_to_num()
.
>>> def str_to_num(str, chars=['.', ',']): ... # убираем начальные и конечные пробелы ... str = str.strip() ... if (any(char in str for char in chars) and ... str.replace('.', '').replace(',', '').isdigit()): ... # если в строке есть точка или запятая и при их замене на '' ... # строка состоит только из цифр то это тип float ... return float(str.replace(',', '.')) ... elif str.isdigit(): ... # если строка состоит только из цифр то это тип int ... return int(str) # полученный список строк 1-м способом >>> str_list = ['12', ' 12,5', ' 14', ' один', ' 15.6', ' два'] # новый список чисел, где будем искать максимум >>> num_list = [] >>> for i in str_list: ... # применим функцию преобразования строки в число ... n = str_to_num(i) ... if n is not None: ... # если функция возвращает число, ... # то добавляем в новый список ... num_list.append(str_to_num(i)) >>> num_list # [12, 12.5, 14, 15.6] >>> max(num_list) # 15.6
Определение индекса у максимального значения в списке.
Допустим есть список чисел и стоит задача, определить индекс максимального значения в этом списке. Для решения этой задачи необходимо пронумеровать список, т.е. создать кортеж – индекс/число, а затем найти максимум, используя в качестве ключа key=lambda i : i[1]
.
>>> lst = [1, 5, 3, 6, 9, 7] # пронумеруем список >>> lst_num = list(enumerate(lst, 0)) >>> lst_num # [(0, 1), (1, 5), (2, 3), (3, 6), (4, 9), (5, 7)] # найдем максимум (из второго значения кортежей) >>> t_max = max(lst_num, key=lambda i : i[1]) >>> t_max # (4, 9) # индекс максимального значения >>> t_max[0] # 4
Нахождение max()
для ключа или значения в словаре dict
.
Допустим есть словарь, задача: найти максимальное значение ключа или самого значения ключа и вывести эту пару.
# имеем словарь >>> d = {1: 3, 2: 4, 1: 9, 4: 1} # преобразуем его в список отображение >>> key_val = d.items() # преобразуем отображение в список # кортежей (ключ, значение) >>> key_val_list = list(key_val) # [(1, 9), (2, 4), (4, 1)]
По умолчанию, при нахождении максимального элемента из списка кортежей будет выбираться кортеж, у которого наибольшее значение имеет ключ исходного словаря (первый элемент в кортеже).
Но если необходимо получить пару (key, value)
, у которого наибольшее значение имеет значение ключа (второй элемент), то для этого нужно применить лямбда-функцию lambda i : i[1]
в качестве аргумента key
функции max()
, которая укажет, из какого элемента кортежа выбирать наибольшее значение.
# происходит сравнение по # первым элементам кортежа >>> kv = max(key_val_list) >>> kv # (4, 1) # максимальное значение ключа в словаре >>> kv[0] # 4 # меняем порядок сравнения >>> kv = max(key_val_list, key=lambda i : i[1]) >>> kv # (1, 9) # максимальное значение в словаре >>> kv[1] # 9 # ключ этого значения в словаре >>> kv[0] # 1 # получаем максимальное значение из словаря >>> d[kv[0]] # 9
Нахождение списка с наибольшей суммой элементов в списке списков.
Для выполнения данной задачи, используем функцию max()
, а в качестве ключевой функции применим встроенную функцию sum()
.
# исходный список >>> lst = [[1, 2, 3], [4, 5], [1, 3, 4, 5], [10, 20]] # выбираем список с наибольшей суммой элементов >>> max(lst, key=sum) # [10, 20]
Выбор списка с наибольшим количеством элементов из списка списков.
Для выполнения данной задачи, используем функцию max()
, а в качестве ключевой функции применим встроенную функцию len()
.
# исходный список >>> lst = [[1, 2, 3], [4, 5], [1, 3, 4, 5], [10, 20]] # выбираем список с наибольшим количеством элементов >>> max(lst, key=len) # [1, 3, 4, 5]