如何将 Python 中的值从最低值重新排列到最高值?

How to rearrange from lowest to highest value in Python?

我正在尝试重新排列一组数字,但是,我试图让最低的数字具有最高的排名

我的输入是 列表=[312198.0, 306400.0, 270345.0, 367979.0, 375502.0]

我想要的输出是 排名=[3,4,5,2,1]

我的代码是:

list=[312198.0, 306400.0, 270345.0, 367979.0, 375502.0]
seq = sorted(x)
index = [seq.index(v) for v in x]
print(index)

我当前的输出是 [2, 1, 0, 3, 4]

在初始化 index 数组时,你实际上已经有了它,加上一个加一。

def answer():
    list = [312198.0, 306400.0, 270345.0, 367979.0, 375502.0]
    seq = sorted(list)
    index = [seq.index(v) + 1  for v in list]
    print(index)

您可以按值的递减顺序对索引进行排序,并在排序后的索引位置分配排名值:

L=[312198.0, 306400.0, 270345.0, 367979.0, 375502.0]

ranks = list(range(len(L)))
for r,i in enumerate(sorted(ranks,key=lambda i:L[i],reverse=True),1):
    ranks[i]=r

print(ranks)
[3, 4, 5, 2, 1]

您也可以使用列表理解更简洁(但效率较低)来执行此操作,其中计算大于每个值的项目数:

ranks = [1+sum(item > value for item in L) for value in L] 

第一个解是O(NlogN) 第二个是O(N^2)

另请注意,第一个解决方案会给相同的值不同的排名,但第二个会给他们相同的排名