Добавьте все значения в список в набор.
Найдите индекс из трех верхних значений в наборе в исходном списке.
]
Изменить
thelist = [1, 45, 88, 1, 45, 88, 5, 2, 103, 103, 7, 8]
theset = frozenset(thelist)
theset = sorted(theset, reverse=True)
print('1st = ' + str(theset[0]) + ' at ' + str(thelist.index(theset[0])))
print('2nd = ' + str(theset[1]) + ' at ' + str(thelist.index(theset[1])))
print('3rd = ' + str(theset[2]) + ' at ' + str(thelist.index(theset[2])))
Изменить
Вы все еще не сказали нам, как обращаться с «совместными победителями», но, глядя на ваши ответы на другие ответы, я предполагаю, возможно, это может быть то, что вы пытаетесь сделать, может быть? Если это не тот результат, который вы хотите, дайте нам пример вывода, который вы надеетесь получить.
thelist = [1, 45, 88, 1, 45, 88, 5, 2, 103, 103, 7, 8]
theset = frozenset(thelist)
theset = sorted(theset, reverse=True)
thedict = {}
for j in range(3):
positions = [i for i, x in enumerate(thelist) if x == theset[j]]
thedict[theset[j]] = positions
print('1st = ' + str(theset[0]) + ' at ' + str(thedict.get(theset[0])))
print('2nd = ' + str(theset[1]) + ' at ' + str(thedict.get(theset[1])))
print('3rd = ' + str(theset[2]) + ' at ' + str(thedict.get(theset[2])))
Выход
1st = 103 at [8, 9]
2nd = 88 at [2, 5]
3rd = 45 at [1, 4]
Кстати: что, если все значения одинаковы (равны первым) или по какой-то другой причине нет третьего места? (или второе место?). Вам нужно защититься от этого? Если вы это сделаете, я уверен, что вы можете разработать соответствующие защитные экраны, чтобы добавить код.