我有一个列表:
somelist = [500, 600, 200, 1000]
我想生成该列表的排名顺序:
rankorderofsomelist = [3, 2, 4, 1]
有some complex solutions ,但是有没有人有什么简单的方法呢?
最佳答案
由于您已将此问题标记为 scipy
,您可以使用 scipy.stats.rankdata
:
>>> rankdata(somelist)
array([ 2., 3., 1., 4.])
>>> len(somelist) - rankdata(somelist)
array([ 2., 1., 3., 0.])
>>> len(somelist) - rankdata(somelist) + 1
array([ 3., 2., 4., 1.])
真正的优势是您可以指定如何处理极端情况:
>>> rankdata([0,1,1,2])
array([ 1. , 2.5, 2.5, 4. ])
>>> rankdata([0,1,1,2], method='min')
array([ 1, 2, 2, 4])
>>> rankdata([0,1,1,2], method='dense')
array([ 1, 2, 2, 3])
关于python - 对数字列表进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28800917/