我有一个这样的列表:
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]
