Вот один из подходов, использующий понимание списка. Идея состоит в том, чтобы sort
a range
такой же длины, что и список, указав, что мы хотим извлечь элементы из списка в аргументе key
. В результате мы получаем отсортированный результат range
, возвращающий нам индексы, которые сортируют список:
l= [0.25, 0.5, 0.5, -0.25, -0.25, 0.25]
out = [i for i in sorted(range(len(l)), key=l.__getitem__, reverse=True)][:3]
# [1, 2, 0]
Если вам нужны дополнительные -1s
:
out + [-1] * (len(l) - len(out))
# [1, 2, 0, -1, -1, -1]