Проще - в терминах количества кода или в терминах асимптотической сложности?
Если второе, то заведи 2 переменные: первый макс, второй макс, и обновляй их на каждой итерации.
lst = [int(input()) for _ in range(int(input()))]
a, b = max(lst[:2]), min(lst[:2])
for i in range(2, len(lst)):
v = lst[i]
if v > a: a, b = v, a
elif v > b: b = v
print(a, b)
или без материализации списка, обрабатывая последовательность по мере ввода:
print(
*__import__("functools").reduce(
lambda t, v: (v, t[0]) if v > t[0] else (t[0], v) if v > t[1] else t,
(int(input()) for _ in range(int(input()))),
(0, 0)
)
)
И желательно реализовывать алгоритмы не на Питоне. Реализация алгоритма на самом Питоне может оказаться медленнее вызова встроенной функции. Например, тупо вызвать sort и взять два элемента с конца может быть быстрее, просто потому что sort написан на Си.