Код возвращает не то что я хочу
Я решаю задание курса по питону. Высшей школы экономики.
Мой код возвращает не то что мне нужно.
Вот задание.
Дан список чисел. Выведите значение наибольшего элемента в списке, а затем индекс этого элемента в списке. Если наибольших элементов несколько, выведите значение и индекс первого из них.
Формат ввода
Вводится список чисел. Все числа списка находятся на одной строке.
Формат вывода
Выведите ответ на задачу.
Примеры
Тест 1
Входные данные:
1 2 3 2 1
Вывод программы:
3 2
Тест 2
Входные данные:
1 2 3
Вывод программы:
3 2
Общая логика моего кода такая. Я сравниваю первое число списка с i, которая проходит список от самого начала до конца. Если i больше либо равно первому числу списка то оно сохраняется в переменную s как наибольшее на данный момент и когда цикл заканчивается печатается наибольше число и его индекс.
spisok = list(map(int, input().split()))
s = 0 #Переменная наибольшего числа
ind = 0 #Здесь будет храниться индекс наибольшего числа
for i in list(spisok): #Цикл в котором код проходит по всем числам в списке
pred = spisok[0] #В переменную кинул первое число из списка
if i >= int(pred): #Сравниваю i и самое первое число из списка
s = i #Здесь будет храниться наибольшее число
ind = spisok.index(s) #Индекс наибольшего числа
print(s, ind) #Напечатать наибольшее число и его индекс
Я не понимаю что не так с кодом. Если я вбиваю 1 2 3 4 5 то программа выводит 5 4 то есть верный ответ. Если вбиваю 1 2 10 1 1 выдаёт 1 0, что не верно. 1 2 3 2 1 вывод 1 0, опять неверно. 1 1 10 2 5 вывод 5 4 неверно.
Ответы (2 шт):
spisok = list(map(int, input().split()))
s = 0
ind = 0
pred = spisok[0]
for i in list(spisok):
if i >= int(pred):
s = i
ind = spisok.index(s)
pred = i
print(s, ind)
но вместо ручного нахождения максимума лучше воспользоваться функцией max
spisok = list(map(int, input().split()))
el = max(spisok)
print(el, spisok.index(el))
Как вариант:
my_list = list(map(int, input().split()))
max_ind = 0 # индекс первого элемента
max_val = my_list[max_ind] # значение первого - в max
for i, n in enumerate(my_list[1:], 1): # перебор в нумерованном срезе от второго до конца
if n > max_val: # только если больше:
max_val = n # переписать индекс и значение
max_ind = i