Python获取列表中元素的等级

2024-04-25 02:14:40 发布

您现在位置: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中的值按索引的降序)

我修好了。对不起,睡眠不足


Tags: 代码intrue编辑列表forindex顺序
1条回答
网友
1楼 · 发布于 2024-04-25 02:14:40

您应该遍历排序后的列表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)。相反,您应该考虑创建一个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]

相关问题 更多 >