插曲是这样的,之前一直在给别人写外包程序,在程序中我使用到了numpy库中的argsort排序方法,这个排序方法十分方便,对可迭代对象进行排序并返回原顺序的索引值。由于程序要传给客户,所以我将代码封装成了exe可执行程序。之前封装出来的程序最多也就40来兆,可是自从我将开发环境切换到anaconda后,封装出来的程序高达200多兆,简直吓死我了。今天客户再次需要这个程序,于是我决定抛弃numpy库,自己实现argsort算法。
numpy实现
首先来看看numpy库中argsort的用法:
|
|
第一个参数是需要排序的可迭代对象,第二个参数是排序的维度,第三个参数是排序的算法,常见的有快排(quicksort)、堆排序(heapsort)以及归并排序(mergesort)。第四个参数是排序的次序。
实例:
|
|
运行结果:
|
|
原生python实现
其实原生python的实现主要是借用python内置函数sorted,但是sorted函数返回的结果是排序的最终结果而不是排序之前的索引值序列。但是我们可以利用sorted函数对字典排序的能力,将列表转换成字典就可以了。列表转字典的方法是先将列表通过enumerate函数转换成枚举型,然后在通过dict函数转换成字典。这样传入的列表就变为一个键为索引值为原值的一个字典了。这样我们再使用sorted函数对字典排序,再返回字典的键就可以了。
|
|
运行结果:
|
|