min(iterable, *[, key, default]) min(arg1, arg2, *args[, key])
iterable
- итерируемый объект,key
- должна быть функцией (принимает один аргумент), используется для порядка сравнения элементов итерируемого объекта. Функция вычисляется один раз.default
- значение по умолчанию, если итерируемый объект окажется пустым,arg1...argN
- позиционный аргумент,*args
- список позиционных аргументов.Функция min()
возвращает минимальное значение элемента из итерируемого объекта или наименьшее из двух или более переданных позиционных аргументов.
sorted(iterable, key=keyfunc, reverse=True)[0]
и heapq.nlargest(1, iterable, key=keyfunc)
Аргумент key
- функция подобная той, которая используется в дополнительном методе списков list.sort()
. Функция принимает один аргумент и используется для упорядочивания элементов.
>>> x = ['4', '11', '6', '31'] # функция `min` сравнивает # числа как строки >>> min(x) # '11' # функция 'key=lambda i: int(i)' применяется # к каждому элементу списка 'x', преобразуя # строки в тип 'int' и теперь функция `min` # сравнивает элементы списка как числа. >>> min(x, key=lambda i: int(i)) # '4' # или другое применение функции 'key' выбор # списка с наименьшей суммой элементов >>> min([1,2,3,4], [3,4,5], key=sum) # [1,2,3,4]
Аргумент default
по умолчанию указывает объект, который нужно вернуть, если итерируемый объект пуст. Если итерация пуста и значение по умолчанию не указано, то возникает ошибка ValueError
.
# Значение по умолчанию >>> min([], default=0) # 0 >>> min([]) # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # ValueError: min() arg is an empty sequence
Функция min()
сравнивает элементы, используя оператор <
. Поэтому, все передаваемые в них значения должны быть сопоставимы друг с другом и одного типа, иначе бросается исключение TypeError
При передаче в качестве аргумента текстовых строк, байтовых строк или байтовых массивов, а так же списка символов, минимальное значение будет выбираться исходя из порядка следования символов, в таблице соответствующей кодировки.
>>> x = list('abcdifgh') >>> min(x) # 'a'
Изменено в Python 3.8: Аргумент key
может быть None
.
max()
.# использование позиционных аргументов >>> min(5, 3, 6, 5, 6) # 3 # использование в качестве аргумента списка >>> min([1.2, 1.3, 1.5, 2, 5.52]) # 1.2 # комбинирование позиционных аргументов и списка # при передаче списка 'x' происходит его распаковка >>> x = (1.2, 1.3, 1.5, 2, 5.52) >>> min(5, 3, 5, *x) # 1.2
Найдем самую короткую строку. В качестве ключа используем функцию len()
. Она посчитает количество символов в строке каждого переданного позиционного аргумента, а функция min()
выберет минимальное число. Строки можно передать например списком ['Jul', 'John', 'Vicky']
, результат будет тот же.
>>> min('Jul', 'John', 'Vicky', key=len) # 'Jul'
min()
в списке строк, записанных как целые числаЕсть список строк чисел и необходимо найти минимум, как если бы они были целыми числами? В первом случае функция min()
выберет наименьшее значение списка исходя из лексикографической сортировки. Применим функцию lambda i: int(i)
в качестве ключа key
, которая преобразует строчные элементы списка в целые числа, тогда функция min()
выберет то что нам нужно.
>>> x = ['4', '11', '6', '31'] # неправильное решение >>> min(x) # '11' # правильное решение >>> min(x, key = lambda i: int(i)) # '4'
min()
по второму элементу кортежа дляНапример есть список кортежей. По умолчанию будет выбираться кортеж, у которого минимальное значение имеет первый элемент. Но мы хотим получить кортеж, у которого наименьшее значение имеет второй элемент! Для этого применим лямбда-функцию lambda i : i[1]
в качестве ключа key
, которая укажет функции min()
, из каких элементов кортежа выбирать минимальное значение.
>>> x = [(1,3), (2,4), (1,9), (4,1)] # происходит сравнение по # первым элементам кортежа >>> min(x) # (1,3) # меняем порядок сравнения >>> x = [(1,3), (2,4), (1,9), (4,1)] >>> min(x, key=lambda i : i[1]) # (4,1)
Допустим есть список чисел и стоит задача, определить индекс минимального значения в этом списке.
Для решения этой задачи необходимо пронумеровать список, т.е. создать кортеж - индекс/число, а затем найти минимум при помощи функции min()
, а в качестве ключа этой функции использовать key=lambda i : i[1]
.
>>> lst = [5, 3, 1, 0, 9, 7] # пронумеруем список >>> lst_num = list(enumerate(lst, 0)) # получился список кортежей, в которых # первый элемент - это индекс значения списка, # а второй элемент - само значение списка >>> lst_num # [(0, 5), (1, 3), (2, 1), (3, 0), (4, 9), (5, 7)] # найдем минимум (из второго значения кортежей) >>> t_min = min(lst_num, key=lambda i : i[1]) >>> t_min # (3, 0) # индекс минимального значения списка >>> t_min[0] # 3