Вот способ использования непосредственно встроенных функций max
и min
с пользовательскими key
:
arr = [5,3,6,"-",3,"-",4,"-"]
max(arr, key=lambda x: (isinstance(x,int), x))
# 6
И аналогично для min
:
min(arr, key=lambda x: (not isinstance(x,int), x))
# 3
Подробности
Для минимума рассмотрим следующее понимание списка как «эквивалент» преобразования, примененного с key
:
sorted([(not isinstance(x,int), x) for x in arr])
[(False, 3),
(False, 3),
(False, 4),
(False, 5),
(False, 6),
(True, '-'),
(True, '-'),
(True, '-')]
Таким образом, min
будет самым низким кортежем, то есть (0,3)
.
А для max
самым высоким будет (1,6)
:
sorted([(isinstance(x,int), x) for x in arr])
[(False, '-'),
(False, '-'),
(False, '-'),
(True, 3),
(True, 3),
(True, 4),
(True, 5),
(True, 6)]