Функции min и max в Python

В языке программирования Python есть встроенные функции поиска минимума и максимума. Им можно передавать как один объект (список или другой объект-последовательность или итерируемый объект), так и непосредственно множество однотипных объектов.

Если передается один список, то в нем находится минимум или максимум, который возвращается.

>>> 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

Здесь во втором случае находится максимум среди абсолютных значений чисел. То есть к каждому элементу списка применяется функция abs. Однако применить ее к целым спискам нельзя:

>>> max(a,b,key=abs) 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
TypeError: bad operand type for abs(): 'list'