While we're talking about annoyances

Raymond Hettinger python at rcn.com
Sun Apr 29 21:12:17 CEST 2007


[Steven D'Aprano]
> I recently needed to write a function to generate a rank table from a
> list. That is, a list of ranks, where the rank of an item is the position
> it would be in if the list were sorted:
>
> alist = list('defabc')
> ranks = [3, 4, 5, 0, 1, 2]
. . .
> def rank(sequence):
>     table = [None] * len(sequence)
>     for j, idx in enumerate(index(sequence)):
>         table[idx] = j
>     return table

FWIW, you can do ranking faster and more succinctly with the sorted()
builtin:

def rank(seq):
    return sorted(range(len(seq)), key=seq.__getitem__)


Raymond




More information about the Python-list mailing list