如何按降序获取排序数组的索引

时间:2019-08-06 18:23:09

标签: python python-3.x sorting

我有一个简单的值列表,我需要按照原始值顺序(最大到最小)对索引进行排序。

假设列表为

maxList = [7, 3, 6, 9, 1, 3]

结果应为:

indexedMaxList = [3, 0, 2, 1, 5, 4]

到目前为止我尝试过的事情:

def ClusteringOrder(maxList):
    sortedMaxList = maxList.copy()
    sortedMaxList.sort(reverse=True)
    indexedMaxList = []
    for i in range(len(maxList)):
        indexedMaxList.append(maxList.index(sortedMaxList[i]))
    return(indexedmaxList)

问题显然是,以这种方式执行将返回第一次出现重复值的索引。在这种情况下,双精度数3将返回1两次,因此结果将是:

indexedMaxList = [3, 0, 2, 1, 1, 4]

是否有任何简单的方法可以将实际位置取回?

2 个答案:

答案 0 :(得分:2)

您可以将enumerate()key=中的自定义sorted()参数结合起来:

maxList = [7, 3, 6, 9, 1, 3]

print([i[0] for i in sorted(enumerate(maxList), key=lambda k: k[1], reverse=True)])

打印:

[3, 0, 2, 1, 5, 4]

答案 1 :(得分:0)

import numpy
maxList = [7, 3, 6, 9, 1, 3]
print(np.flip(np.argsort(maxList)))

输出

[3 0 2 5 1 4]