Вы сравниваете две разные вещи.
Для вашего первого случая, если мы посмотрим на документы: https://docs.python.org/3/library/functions.html#max
max (arg1, arg2, * args [, ключ])
Вернуть самый большой элемент в итерируемом или самый большой из двух или более аргументов. Ключевой аргумент задает функцию упорядочения с одним аргументом, подобную той, что используется для list.sort ().
Это означает, что ключ lambda x: (-abs(x), x)
является функцией упорядочения, что означает, что для каждого x
в итерируемом a
, (-abs(x), x)
оценивается и используется для упорядочивания элементов для определения максимального элемента итератор, и в соответствии с этим порядком, 1
является максимальным элементом
In [24]: a = [1,4,6,-8,-10]
In [40]: print(max(a, key=lambda x: (-abs(x), x), default=0))
1
Для второго случая, если мы посмотрим на документы: https://docs.python.org/3/library/functions.html#map
карта (функция, повторяемая, ...)
Возвратите итератор, который применяет функцию к каждому элементу итерируемого, получая результаты
Это означает, что функция lambda x: (-abs(x), x)
применяется к каждому элементу x
из a
, поэтому мы возвращаем (-abs(x), x)
для каждого x, а max
применяется к обновленному итератору, который является самый большой кортеж (-1,1)
In [25]: b = list(map(lambda x: (-abs(x), x), a))
In [26]: b
Out[26]: [(-1, 1), (-4, 4), (-6, 6), (-8, -8), (-10, -10)]
In [27]: max(b)
Out[27]: (-1, 1)