繁体   English   中英

Python在列表奇怪的行为中获得元素的排名

[英]Python getting ranks of elements in list weird behavior

我有一个值列表,我想在列表中获得这些值的等级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。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM