获取列表的升序索引


问题内容

我知道这个问题已经问了一百遍了,但是答案似乎总是“使用numpy的argsort”。但是,要么我误解了大多数人的要求,要么答案不正确。无论如何,我都希望获得列表的升序索引。措辞令人困惑,因此,举个例子,给定一个列表,[4, 2, 1, 3]我希望得到一个列表[3, 1, 0, 2]。最小的项是1索引0,最大的项是4索引3。在我看来,argsort经常有人建议这样做,但似乎并没有这样做。

from numpy import argsort

l = [4, 2, 1, 3]
print(argsort(l))
# [2, 1, 3, 0]
# Expected [3, 1, 0, 2]

显然argsort正在做其他事情,那么它实际上在做什么,并且它与预期行为有何相似之处,以至于经常(错误地)建议这样做?而且,更重要的是,如何获得所需的输出?


问题答案:

argsoft()基本上将您的列表转换为索引的排序列表。

l = [4, 2, 1, 3]

首先,它获取列表中每个元素的索引,因此新列表变为:

indexed=[0, 1, 2, 3]

然后根据原始列表中的项目对索引列表进行排序。如4:0 , 2:1 , 1:2 and 3:3哪里:表示“对应于”。

对我们得到的原始列表进行排序

l=[1, 2, 3, 4]

并放置旧列表的每个对应索引的值

new=[2,1,3,0]

因此,基本上,它会根据原始列表对列表的索引进行排序。据我了解。对不起,如果我错了。

希望能帮助到你