为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕的地6264312 2021-12-29 18:16:31
我有一个值列表,我想获得这些值在列表 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。
查看完整描述

1 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您应该遍历排序列表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]


查看完整回答
反对 回复 2021-12-29
  • 1 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信