Python获取列表奇怪行为中元素的等级

我有一个值列表,我想获得这些值在列表 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:我修好了。对不起,睡眠不足:p。


慕的地6264312
浏览 134回答 1
1回答

人到中年有点甜

您应该遍历排序列表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]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python