О функции min в Python
В питоне есть много удобных функций, которые решают всякие мелкие задачки. Одна из таких функций — min() . Она находит минимальный элемент в списке. Например, ниже показан поиск наименьшего числа и поиск самой короткой строки (если коротких много — выберется первая по алфавитному порядку):
numbers = [4, 1, 2, 5] min(numbers) # 1 words = ['abcd' 'ab', 'a', 'b', 'abcde'] min(words) # 'a'
Самое главное, что эта функция умеет искать минимальное значение среди любых типов данных, доступных в питоне. Давайте найдём автора с наименьшим количеством постов. Есть список авторов блога: словари с именем автора и количеством его постов:
users = [ 'username': 'Даша', 'posts': 25>, 'username': 'Валера', 'posts': 10>, 'username': 'Ибрагим', 'posts': 56>, ]
Здесь подошла бы функция min() , но Python не умеет сравнивать словари напрямую. Нужно сказать ему, что сравнивать нужно по значению ключа ‘posts’ .
К счастью, создатели языка предвидели такой случай и ввели опциональный параметр key . Он принимает на вход функцию, которая для каждого автора вернёт количество его постов. min поймёт, что сравнивать нужно по ним:
def get_user_posts(user): return user['posts'] min(users, key=get_user_posts) # Вернёт
Функция get_user_posts , получает на вход пользователя user , достаёт количество его постов и возвращает наружу return user[‘posts’] . Затем, мы передаём эту функцию в min() . Обратите внимание, что get_user_posts передаётся без скобок, подобно коллбэку! Функция min будет вызывать её самостоятельно, во время поиска.
Читать далее
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Функции 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'
Функция min() в Python, минимальное значение элемента
Возвращает минимальное значение элемента последовательности
Синтаксис:
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 "", line 1, in # ValueError: min() arg is an empty sequence
При передаче в качестве аргумента текстовых строк, байтовых строк или байтовых массивов, а так же списка символов, минимальное значение будет выбираться исходя из порядка следования символов, в таблице соответствующей кодировки.
>>> 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
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Функция 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(), следующий элемент асинхронного итератора
Нахождение максимального и минимального значений
Предложите более простой способ нахождения максимального и минимального чисел из заданных, БЕЗ использования функций min() и max() . В моем коде задается 6 чисел (первое - первая строчка и еще 5 в цикле for ) и из них выбираются максимальное и минимальное. Заранее спасибо. Мой способ:
a=float(input('enter number ')) '''создание первого числа''' min = a max = a '''присвоение значения первого числа максимальному и минимальному значению''' for i in range(5): '''цикл для создания чисел и проверки их на максимальность или минимальность''' a=float(input('enter number ')) '''создание нового числа''' if a > max: '''проверка на максимальность''' max = a if a < max and a < min: '''проверка на минимальность''' min = a print('\n','min is: ',round(min,2),'\n','max is: ',round(max,2)) '''вывод миниального и максимального чисел'''
Отслеживать
2,050 4 4 золотых знака 15 15 серебряных знаков 23 23 бронзовых знака
задан 16 авг 2018 в 14:00
57 1 1 золотой знак 4 4 серебряных знака 13 13 бронзовых знаков