在Python中查找列表的前3个最大值并将其位置保留在另一个列表中?

在Python中查找列表的前3个最大值并将其位置保留在另一个列表中?,python,list,Python,List,我正在为我的uni论文构建一个Python程序,我正在试图找到一种方法,从一个带浮点数的列表中找到前3个最大数,这样我就可以在另一个列表中保留它们的位置,以备将来处理 `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

我正在为我的uni论文构建一个Python程序,我正在试图找到一种方法,从一个带浮点数的列表中找到前3个最大数,这样我就可以在另一个列表中保留它们的位置,以备将来处理

`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]

这里有一种使用列表理解的方法。其思想是创建一个与列表长度相同的
范围
,指定我们希望在
参数中从列表中获取元素。我们得到的结果是排序后的
范围
,以返回将对列表进行排序的索引:

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]

@yatu的答案中有一个小小的改动,略短一些:

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

[1, 2, 0]

哎哟,看起来我们在这里采取了完全相同的方法:)@yatu我试图回答同样的问题(这么晚才看到,当我看到你已经回答了),所以我决定调整它,lol:-)注意,前两个输出项遵循的逻辑,即如果两个项相同,则从左到右得到索引,这同样适用于
0.25
,因此如果输出是
[1,2,0,-1,-1,-1]