Функции min и max в Python
В языке программирования Python есть встроенные функции поиска минимума и максимума. Им можно передавать как один объект, так и непосредственно множество однотипных объектов. Если передается один объект, то им может быть список, любая другая коллекция или итерируемый объект.
Если передается один список, то в нем находится минимум или максимум, которые возвращаются функциями min() и max() .
>>> a = [11,8,12,0] >>> min(a) 0 >>> max(a) 12
Если передается несколько списков, то целиком возвращается один из переданных списков. При этом сравнение происходит поэлементно: сначала сравниваются первые элементы списков. Если они не равны, то функция min() вернет тот список, первый элемент которого меньше, max() — наоборот. Если первые элементы равны, то будут сравниваться вторые и т. д.
>>> a = [11,8,12,0] >>> b = [11,7,123,9] >>> m = min(a,b) >>> print(m, type(m)) [11, 7, 123, 9] >>> c = [11,8,12] >>> min(a,c) [11, 8, 12]
Функциям min() и max() можно непосредственно передавать множество чисел:
>>> max(3, 8, -3, 12, 9) 12
Таким образом, если функции получают несколько объектов, то сравниваются сами объекты. И неважно какого они типа: списки, числа или что-то другое.
Однако нельзя передать числа и строки или смешанный список. В этом случае функция возвращает ошибку:
>>> s = ['a','d',1] >>> min(s) Traceback (most recent call last): File "", line 1, in TypeError: unorderable types: int() < str()
>>> s = ['a','d','ee'] >>> min(s) 'a'
В функциях min() и max() можно указать необязательный именной параметр key . Ему присваивается одноаргументная функция, которая выполняет какое-то предварительное действие над элементами списка.
>>> a = [8,-11,4,2,-5] >>> max(a) 8 >>> max(a,key=abs) -11
Здесь во втором случае находится максимум среди абсолютных значений чисел. То есть к каждому элементу списка применяется встроенная в Python функция abs . Однако применить ее к целым спискам нельзя:
>>> max(a,b,key=abs) Traceback (most recent call last): File "", line 1, in TypeError: bad operand type for abs(): 'list'
Как найти максимум и минимум функции для заданного интервала?
Есть ли в библиотеке SymPy метод для вычисления минимума и максимума заданной функции на отрезке?
from sympy import * x = Symbol("x") x1 = -5 x2 = 5 f = x**2
Необходимо найти экстремумы функции f в промежутке от x1 до x2
Отслеживать
149k 12 12 золотых знаков 59 59 серебряных знаков 132 132 бронзовых знака
задан 7 дек 2019 в 22:51
21 1 1 серебряный знак 2 2 бронзовых знака
10 дек 2019 в 6:53
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
from sympy import solveset, symbols, Interval, Min, Max x = symbols('x') lower_bound = -5 upper_bound = 5 f = x**2 zeros = solveset(f, x, domain=Interval(lower_bound, upper_bound)) assert zeros.is_FiniteSet # If there are infinite solutions the next line will hang. res_min = Min(f.subs(x, lower_bound), f.subs(x, upper_bound), *[f.subs(x, i) for i in zeros]) res_max = Max(f.subs(x, lower_bound), f.subs(x, upper_bound), *[f.subs(x, i) for i in zeros])
In [29]: res_min Out[29]: 0 In [30]: res_max Out[30]: 25
from sympy.calculus.util import minimum, maximum interv = Interval(-5, 5) res_min = minimum(f, interv) res_max = maximum(f, interv)
Какая функция нужна для нахождения максимума из двух чисел в Python?
В нахождении максимального значения из двух (или более) чисел поможет функция max() . Она может принять как несколько чисел, так и итерируемый объект из них состоящий и вернуть наибольшее значение:
x = max(5, 10) print(x) # => 5 a = (1, 5, 3, 9) y = max(a) print(y) # => 9
Функция max() в Python, максимальное значение элемента
Находит максимальное значение элемента в последовательности
Синтаксис:
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
При передаче в качестве аргумента текстовых строк, байтовых строк или байтовых массивов, а так же списка символов, максимальное значение будет выбираться исходя из порядка следования символов, в таблице соответствующей кодировки.
>>> 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]
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Функция abs(), абсолютное значение числа
- Функция all(), все элементы True
- Функция any(), хотя бы один элемент True
- Функция ascii(), преобразует строку в ASCII
- Функция bin(), число в двоичную строку
- Класс bool(), логическое значение объекта
- Функция breakpoint(), отладчик кода
- Класс bytearray(), преобразует в массив байтов
- Класс bytes(), преобразует в строку байтов
- Функция callable(), проверяет можно ли вызвать объект
- Функция chr(), число в символ Юникода
- Класс classmethod, делает функцию методом класса
- Функция compile() компилирует блок кода Python
- Класс complex(), преобразует в комплексное число
- Функция delattr(), удаляет атрибут объекта
- Класс dict() создает словарь
- Функция dir(), все атрибуты объекта
- Функция divmod(), делит числа с остатком
- Функция enumerate(), счетчик элементов последовательности
- Функция eval(), выполняет строку-выражение с кодом
- Функция exec(), выполняет блок кода
- Функция filter(), фильтрует список по условию
- Класс float(), преобразует в вещественное число
- Функция format(), форматирует значение переменной
- Класс frozenset(), преобразует в неизменяемое множество
- Функция getattr(), значение атрибута по имени
- Функция globals(), переменные глобальной области
- Функция hasattr(), наличие атрибута объекта
- Функция hash(), хэш-значение объекта
- Функция help(), справка по любому объекту
- Функция hex(), число в шестнадцатеричную строку
- Функция id(), идентификатор объекта
- Функция input(), ввод данных с клавиатуры
- Класс int(), преобразует в тип int
- Функция isinstance(), принадлежность экземпляра к классу
- Функция issubclass(), проверяет наследование класса
- Функция iter(), создает итератор
- Функция len(), количество элементов объекта
- Класс list(), преобразовывает в список
- Функция locals(), переменные локальной области
- Функция map(), обработка последовательности без цикла
- Функция max(), максимальное значение элемента
- Класс memoryview(), ссылка на буфер обмена
- Функция min(), минимальное значение элемента
- Функция next(), следующий элемент итератора
- Класс object(), возвращает безликий объект
- Функция oct(), число в восьмеричную строку
- Функция open(), открывает файл на чтение/запись
- Функция ord(), число символа Unicode
- Функция pow(), возводит число в степень
- Функция print(), печатает объект
- Класс property(), метод класса как свойство
- Класс range(), генерирует арифметические последовательности
- Функция repr(), описание объекта
- Функция reversed(), разворачивает последовательность
- Функция round(), округляет число
- Класс set(), создает или преобразовывает в множество
- Функция setattr(), создает атрибут объекта
- Класс slice(), шаблон среза
- Функция sorted(), выполняет сортировку
- Декоратор staticmethod(), метод класса в статический метод
- Класс str(), преобразует объект в строку
- Функция sum(), сумма последовательности
- Функция super(), доступ к унаследованным методам
- Класс tuple(), создает или преобразует в кортеж
- Класс type(), возвращает тип объекта
- Функция vars(), словарь переменных объекта
- Функция zip(), объединить элементы в список кортежей
- Функция __import__(), находит и импортирует модуль
- Функция aiter(), создает асинхронный итератор
- Функция anext(), следующий элемент асинхронного итератора