Найти топ-3 максимума списка и сохранить их позиции в другом списке в Python? - PullRequest
2 голосов
/ 09 мая 2019

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

`maxim=max(listScore)
`i=0
`keep = [-1]*num
`for x in range(0,num):
````if listaScore[x]==maxim:
`````````keep[i]=x
`````````i+=1
`````````listScore[x]=-100
````maxim=max(listaScore)

the results i want is :

listScore=[0.25, 0.5, 0.5, -0.25, -0.25, 0.25]
positions=[1,2,5,-1,-1,-1]

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Вот одна небольшая поправка в ответе @ yatu, немного короче:

print([i for i in sorted(range(len(l)), key=l.__getitem__)][-3:])

Что дает:

[1, 2, 0]
1 голос
/ 09 мая 2019

Вот один из подходов, использующий понимание списка. Идея состоит в том, чтобы 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...