Skip to main content
 首页 » 编程设计

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

2025年05月04日40dflying

我有一个这样的列表:

 myList = [10,30,40,20,50] 

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

import numpy as np 
so = np.argsort(myList) 

这给了我输出:

array([0, 3, 1, 2, 4]) 

当我想使用 so 对数组进行排序时,它工作正常:

myArray = np.array([1,2,3,4,5]) 
myArray[so] 
array([1, 4, 2, 3, 5]) 

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

myList2 = [1,2,3,4,5] 
myList2[so] 

TypeError: only integer arrays with one element can be converted to an index

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

请您参考如下方法:

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

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

In [8]: np.array(myList2)[so] 
Out[8]: array([1, 4, 2, 3, 5]) 

或者你可以使用列表推导式——

In [7]: [myList2[i] for i in so] 
Out[7]: [1, 4, 2, 3, 5]