我有一个值列表,我想获取这些值在列表 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, 1, 7, 0, 8]而不是正确的顺序。
编辑:抱歉,正确的顺序是 [7,5,3,2,1,4,0,6,8] (x 中的值按索引降序排列)
EDIT2:我修好了。抱歉, sleep 不足:p。
最佳答案
您应该迭代排序列表 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]
索引
变为:
[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]
关于Python获取列表中元素的排名奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55525309/