Функции 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] <class 'list'>
>>> 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 "<stdin>", line 1, in <module>
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 "<stdin>", line 1, in <module>
TypeError: bad operand type for abs(): 'list'