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

2024-10-02 14:25:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python为我的uni短文构建一个程序,我试图找到一种方法,从一个带有float的列表中找到前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]

Tags: 方法in程序列表forrangefloatnum
2条回答

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

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

它给出:

[1, 2, 0]

下面是一种使用列表理解的方法。其思想是^{}一个与列表长度相同的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]

相关问题 更多 >