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

时间:2019-05-09 08:13:04

标签: python list

我正在为我的大学论文构建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]

2 个答案:

答案 0 :(得分:1)

这是使用列表理解的一种方法。这个想法是sort和列表一样长的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]

答案 1 :(得分:1)

这里是@yatu的答案中的一个细微调整,简短一点:

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

哪个给:

[1, 2, 0]