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

标签 python list

我有一个值列表,我想获取这些值在列表 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:我修好了。抱歉, sleep 不足: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]

索引变为:

[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]

关于Python获取列表中元素的排名奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55525309/

相关文章:

python - 让 Web Bot 正确抓取站点的所有页面

python - 如何在没有 pip 和 brew 的 ssh hadoop 系统(沙箱)上安装 python 3?

python - 在Python字典中查找单词对

python - 如何打印出具有特定质量的列表?

c++ - 单向链表,为什么链表是空的(head == NULL)?

Python 将 txt 文件转换为 JSON 剥离和元素排序

python - 为什么conda在激活另一个环境后重新定义基础环境?

python - 在 Python 中检查文件是否存在于 GCS 存储桶中(搜索部分文件名)的最佳方法是什么?

css - 图像列表在 Internet Explorer 中被截断

r - 从列表中子集 n 个元素