如何将 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)
另请注意,第一个解决方案会给相同的值不同的排名,但第二个会给他们相同的排名
我正在尝试重新排列一组数字,但是,我试图让最低的数字具有最高的排名
我的输入是 列表=[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)
另请注意,第一个解决方案会给相同的值不同的排名,但第二个会给他们相同的排名