【问题标题】:How do I find the sorted position/index of a list in python?如何在 python 中找到列表的排序位置/索引?
【发布时间】:2021-10-17 13:12:23
【问题描述】:

例如,我有一个列表

[12, 1205, 102, 6]

我想得到

[1, 3, 2, 0]

因为如果列表已排序,这是它们应该处于的位置。

如何在 python 中实现这一点?

谢谢!

【问题讨论】:

  • 您是否尝试解决此问题?您有需要帮助的代码吗?
  • 你不能把所有的东西都减1吗?
  • 我只是在寻找一种在一行中完成它的方法,我不想使用 for 循环或 while 循环
  • 也许我应该换个例子

标签: python list sorting indexing


【解决方案1】:

IIUC,你想要排序后的排名:

sorted_list = sorted(your_list)
[sorted_list.index(x) for x in your_list]

【讨论】:

  • 虽然这回答了问题,但这种单行方式效率极低,您将列表排序 N 次(列表长度为 N)。
  • 确实如此,我计算了理解之外的排序值
【解决方案2】:

可以使用 numpy 对列表进行排序:

numpy.argsort([2, 3, 5, 1, 4])

【讨论】:

  • 这不是 OP 所期望的,这提供了索引以对数组进行排序。
  • 嗯,好吧,对不起。但是你能解释一下这有什么不同吗?我迷路了,希望了解 argsort 和 OP 期望之间的区别
  • 你有索引来获取排序的数组,OP只是想要排名。
【解决方案3】:

您可以使用 sorted() 函数按排序值的顺序获取索引列表,然后使用它来设置结果列表中的位置:

L = [12, 1205, 102, 6]

P = sorted(range(len(L)),key=L.__getitem__) # positions in sorted order
S = [None]*len(L)                           # resulting list
for p,i in enumerate(P): S[i]=p             # assign position at original indexes 

print(S) # [1, 3, 2, 0]

【讨论】:

    猜你喜欢
    • 2019-07-13
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    相关资源
    最近更新 更多