【问题标题】:How to get indices of sorted array in descending order如何按降序获取排序数组的索引
【发布时间】:2019-08-07 02:37:34
【问题描述】:

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

假设列表是

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]

有什么简单的方法可以恢复实际位置吗?

【问题讨论】:

标签: python python-3.x sorting


【解决方案1】:

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

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]

【讨论】:

    【解决方案2】:
    import numpy
    maxList = [7, 3, 6, 9, 1, 3]
    print(np.flip(np.argsort(maxList)))
    

    输出

    [3 0 2 5 1 4]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2010-10-27
      • 2018-05-26
      • 2016-11-03
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多