2024-09-27 21:23:43 发布
网友
我有一个值列表,我想得到这些值在列表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中的值按索引的降序)
我修好了。对不起,睡眠不足
您应该遍历排序后的列表seq,然后找到原始列表x的索引:
seq
x
index变成:
index
[7, 5, 3, 2, 1, 4, 0, 6, 8]
然而,在循环中使用index方法使得解在时间复杂度上不必要地O(n^2)。相反,您应该考虑创建一个dict,将x中的项映射到它们的索引,并且由于dict键的查找平均花费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]
您应该遍历排序后的列表
seq
,然后找到原始列表x
的索引:index
变成:然而,在循环中使用
index
方法使得解在时间复杂度上不必要地O(n^2)。相反,您应该考虑创建一个dict,将x
中的项映射到它们的索引,并且由于dict键的查找平均花费O(1),因此在循环中执行该操作只花费O(n):相关问题 更多 >
编程相关推荐