我有一个清单,
[100,100,50,40,40,20,10]
上面的列表是不同人的排行榜得分。我想转换或找到他们的排名并将其存储在这样的列表中:
[1,1,2,3,3,4,5]
在Python3中有可能做这样的事情吗?
答案 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]