如何根据 numpy argsort 函数的输出对列表进行排序

Cle*_*leb 3 python sorting numpy list

我有一个这样的列表:

 myList = [10,30,40,20,50]
Run Code Online (Sandbox Code Playgroud)

现在我使用numpy's argsort函数来获取排序列表的索引:

import numpy as np
so = np.argsort(myList)
Run Code Online (Sandbox Code Playgroud)

这给了我输出:

array([0, 3, 1, 2, 4])
Run Code Online (Sandbox Code Playgroud)

当我想使用它对数组进行排序时so效果很好:

myArray = np.array([1,2,3,4,5])
myArray[so]
array([1, 4, 2, 3, 5])
Run Code Online (Sandbox Code Playgroud)

但是当我将它应用到另一个列表时,它不起作用但会抛出错误

myList2 = [1,2,3,4,5]
myList2[so]
Run Code Online (Sandbox Code Playgroud)

类型错误:只有具有一个元素的整数数组才能转换为索引

现在,我如何在so不使用 for 循环且不先将此列表转换为数组的情况下对另一个列表进行排序?

Ana*_*mar 5

myList2是一个普通的Python列表,它不支持这种索引。

您需要将其转换为numpy.array, 示例 -

In [8]: np.array(myList2)[so]
Out[8]: array([1, 4, 2, 3, 5])
Run Code Online (Sandbox Code Playgroud)

或者您可以使用列表理解 -

In [7]: [myList2[i] for i in so]
Out[7]: [1, 4, 2, 3, 5]
Run Code Online (Sandbox Code Playgroud)