我想返回排序列表的“反向”索引.我的意思是:我有一个未排序的列表U,我通过S =排序(U)对其进行排序.现在,我可以获得排序索引,使得U(idx)= S – 但我想要S(Ridx)= U.
这里有一个小例子:
U=[5,2,3,1,4]
S=sorted(U)
idx = [U.index(S[i]) for i in range(len(U))]
>>> idx
[3, 1, 2, 4, 0]
Ridx = [S.index(U[i]) for i in range(len(U))]
>>> Ridx
[4, 1, 2, 0, 3]
>>>[U[idx[i]] for i in range(len(U))] == S
True
>>>[S[Ridx[i]] for i in range(len(U))] == U
True
我需要的是获得Ridx的有效方法.
谢谢!
编辑:
行!我对这两个问题的解决方案(@Jon Clements和@Whatang)做了一点速度测试.
剧本:
import datetime as DT
import random
U=[int(1000*random.random()) for i in xrange(pow(10,8))]
S=sorted(U)
idx = sorted(xrange(len(U)), key=U.__getitem__)
T0 &