如何在Python3中找到给定排行榜的排名?

时间:2018-04-26 07:10:10

标签: python python-3.x list

我有一个清单,

[100,100,50,40,40,20,10]

上面的列表是不同人的排行榜得分。我想转换或找到他们的排名并将其存储在这样的列表中:

[1,1,2,3,3,4,5]

在Python3中有可能做这样的事情吗?

3 个答案:

答案 0 :(得分:3)

这个怎么样:

scores = [100,100,50,40,40,20,10]
all_scores = sorted(set(scores), reverse=True)

ranks = [all_scores.index(x) + 1 for x in scores]

print(ranks)

打印:

[1, 1, 2, 3, 3, 4, 5]

这种方法的工作方式是从分数列表(set(scores))中获取唯一元素,然后按降序对它们进行排序。然后,我们在该列表中的scores中找到每个元素的位置,并添加1以获得基于1的排名而不是从0开始。

答案 1 :(得分:1)

如果有两名获胜者(例如排名:1),则跟随者应排名第3。关于这种方法,这应该做的工作:

>>> grades = [100, 100, 50, 40, 40, 20, 10] 
>>> ranks = [grades.index(x)+1 for x in sorted(grades, reverse=True)]
>>> ranks
[1, 1, 3, 4, 4, 6, 7]

答案 2 :(得分:0)

使用pandas.series

import pandas as pd
series = pd.Series(scores)
result = series.rank(method="dense", ascending=0).astype(int).values.tolist()

输出:

[1, 1, 2, 3, 3, 4, 5]