Если нужен максимально простой вариант, можно тупо через два прохода по массиву: нашел макс, убрал, снова нашел макс. Вот как:
Программный код:
def second_max(arr):
if len(arr) < 2:
return None
first_max = second_max = float('-inf')
for num in arr:
if num > first_max:
second_max, first_max = first_max, num
elif first_max > num > second_max:
second_max = num
return second_max if second_max != float('-inf') else None
print(second_max([4, 5, 1, 3, 5])) # выводит 4
Никаких дублирований или сортировок, просто по-пацански и в два прохода!