我有一个值列表,我想在列表x中获得这些值的排名
这是我尝试过的代码:
x = [4,7,9,10,6,11,3,15,2]
seq = sorted(x, reverse=True)
index = [x.index(v) for v in seq]
我不明白为什么会给出这样的输出:[6,4,3,2,5,5,1,7,0,8]而不是正确的顺序。
编辑:对不起,正确的顺序是[7,5,3,2,1,4,0,6,8](x中索引值的降序)
EDIT2:我修复了它。抱歉,睡眠不足:p。
答案 0 :(得分:4)
您应该遍历排序后的列表seq
并找到原始列表x
的索引:
x = [4,7,9,10,6,11,3,15,2]
seq = sorted(x, reverse=True)
index = [x.index(v) for v in seq]
index
变为:
[7, 5, 3, 2, 1, 4, 0, 6, 8]
在循环中使用index
方法会使解决方案的时间复杂度不必要地为 O(n ^ 2)。相反,您应该考虑创建一个将x
中的项目映射到其索引的字典,并且由于查找字典键的平均成本为 O(1),因此以循环方式进行仅花费 O(n):
x = [4,7,9,10,6,11,3,15,2]
indices = {n: i for i, n in enumerate(x)}
seq = sorted(x, reverse=True)
index = [indices[v] for v in seq]