@dmitrylogvinov

Как найти последний максимальный элемент в list?

Не могу никак. Затуп уже полтора часа. Ничего не могу найти

Необходимо найти наибольшее значение в списке и индекс последнего элемента, который имеет данное значение за один проход по списку, не модифицируя этот список и не используя дополнительного списка.

Например:
ввод 1 2 3
вывод 3 2

ввод 1 2 1 2 1
вывод 2 3

ввод 1 2 3 4 5
вывод 5 4

ввод 1 1 1 1 1
вывод 1 4

Вот примеры:
l = list(map(int, input().split()))
n = 0
f = 0
for x in range(len(l)):
    if x > l[n]:
        n += 1
print(l[n], n)


и еще один
def func(array):
    n = 0 
    for i in range(len(array)):
        if array[i] >n:
            n = array[i]
            ind = i
        elif array[i] == n:
            ind += 1
        else:
            pass
    print(n, index)

if __name__=='__main__':
    func(list(map(int, input().split())))
  • Вопрос задан
  • 5901 просмотр
Решения вопроса 2
adugin
@adugin Куратор тега Python
dmitrylogvinov, Вы в корне неправильно подходите к обучению. Вам нужно больше времени проводить с учебником и изучать стандартные библиотеки (и в первую очередь - встроенные функции, обращая особое внимание на их параметры), а не пытаться решать задачи "в лоб", раз за разом городя конструкции в стиле Delphi из базового синтаксиса, примерно одинакового для каждого языка. "Батарейки" в Python присутствуют как раз для того, чтобы не изобретать велосипеды.

Задача решается просто и элегантно:
from itertools import count

def lastmax(*sequence):
    return max(zip(sequence, count()))

assert lastmax(1, 2, 3) == (3, 2)
assert lastmax(1, 2, 1, 2, 1) == (2, 3)
assert lastmax(1, 2, 3, 4, 5) == (5, 4)
assert lastmax(1, 1, 1, 1, 1) == (1, 4)

Те же самое, но без itertools:
def lastmax(*sequence):
    return max(zip(sequence, range(len(sequence))))

Ещё вариант:
from operator import itemgetter

def lastmax(*sequence):
    return max(enumerate(sequence), key=itemgetter(1, 0))[::-1]

И ещё:
def lastmax(*sequence):
    return max({v: i for i, v in enumerate(sequence)}.items())

Есть и ещё несколько более эзотерических вариантов - например, через heapq.
Ответ написан
Комментировать
@fireSparrow
Создаёте две промежуточные переменные. В одной будет лежать текущий максимум, во второй - индекс последнего текущего максимума.
После этого идёте циклом по списку и сравниваете каждый элемент с текущим максимумом.
Если элемент меньше текущего максимума - он нам не интересен, идёте дальше.
Если элемент больше или равен текущего максимума, то значение этого элемента записываете в качестве нового максимума, а его индекс - в переменную для индекса.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы