Сообщить об ошибке.

Функция min() в Python, минимальное значение элемента

Возвращает минимальное значение элемента последовательности

Синтаксис:

min(iterable, *[, key, default])
min(arg1, arg2, *args[, key])

Параметры:

Возвращаемое значение:

  • наименьшее значение.

Описание:

Функция 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.

Примеры нахождения минимального элемента в последовательности.

# использование позиционных аргументов
>>> 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