Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Python, как это можно проще решить?

ᴊäɢᴇʀᴍᴇɪsᴛᴇʀ Просветленный (20155), открыт 1 месяц назад
На вход программе подаются натуральное число n (n≥2), а затем n различных натуральных чисел последовательности, каждое на отдельной строке. Напишите программу, которая выводит наибольшее и второе наибольшее число последовательности.
 n = int(input()) 
lst = []
for i in range(1,n+1):
x = str(input())
lst.append(int(x))
print(max(lst))
del lst[lst.index(max(lst))]
print(max(lst))
3 ответа
Папа Высший разум (149125) 1 месяц назад
Проще - в терминах количества кода или в терминах асимптотической сложности?

Если второе, то заведи 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 написан на Си.
Вадик Новиков Профи (612) 1 месяц назад
 lst = [] 
for i in range(1, int(input()) + 1):
lst.append(int(input()))
print(f'Макс. - {sorted(lst)[-1]}\n'
f'Макс. 2 - {sorted(lst)[-2]}')
Юрий Семыкин Искусственный Интеллект (212031) 1 месяц назад
Например:
 lst = sorted([int(input('x=')) for _ in range(int(input('n=')))], reverse =True) 
print(*lst[:2])
Или:
 print(*sorted([int(input('x=')) for _ in range(int(input('n=')))], reverse =True)[:2]) 
Похожие вопросы