#add original position
X_data = list(enumerate(X, start=1))
#sort by value
X_data = list(sorted(X_data, key=lambda x: x[1], reverse=False))
print(X_data)
Output:
[(1, 10), (2, 20), (3, 20), (5, 40), (4, 50)]
构建字典中的排名列表:
>>> X = [10, 20, 20, 50, 40]
>>> ranks = {}
>>> for i, val in enumerate(sorted(X), 1):
... ranks.setdefault(val, []).append(i)
...
然后取每个列表的平均值以获得每个值的平均排名:
>>> avg_ranks = {v: sum(r)/len(r) for v, r in ranks.items()}
然后使用平均排名字典按原始顺序获取原始列表中每个项目的排名:
>>> [avg_ranks[val] for val in X]
[1.0, 2.5, 2.5, 5.0, 4.0]