python数组排序返回索引_Python实现argsort排序返回索引值

插曲是这样的,之前一直在给别人写外包程序,在程序中我使用到了numpy库中的argsort排序方法,这个排序方法十分方便,对可迭代对象进行排序并返回原顺序的索引值。由于程序要传给客户,所以我将代码封装成了exe可执行程序。之前封装出来的程序最多也就40来兆,可是自从我将开发环境切换到anaconda后,封装出来的程序高达200多兆,简直吓死我了。今天客户再次需要这个程序,于是我决定抛弃numpy库,自己实现argsort算法。

numpy实现

首先来看看numpy库中argsort的用法:

1argsort(a, axis=-1, kind='quicksort', order=None)

第一个参数是需要排序的可迭代对象,第二个参数是排序的维度,第三个参数是排序的算法,常见的有快排(quicksort)、堆排序(heapsort)以及归并排序(mergesort)。第四个参数是排序的次序。

实例:

1

2

3

4

5

6import numpy as np

li = [1.5, 3, 15, 21, 7, 31, 5]

indies = np.argsort(li, kind='heapsort')

print(indies)

运行结果:

1[0 1 6 4 2 3 5]

原生python实现

其实原生python的实现主要是借用python内置函数sorted,但是sorted函数返回的结果是排序的最终结果而不是排序之前的索引值序列。但是我们可以利用sorted函数对字典排序的能力,将列表转换成字典就可以了。列表转字典的方法是先将列表通过enumerate函数转换成枚举型,然后在通过dict函数转换成字典。这样传入的列表就变为一个键为索引值为原值的一个字典了。这样我们再使用sorted函数对字典排序,再返回字典的键就可以了。

1

2

3

4

5

6

7

8

9def argsort(X):

d = dict(enumerate(X))

r = dict(sorted(d.items(), key=lambda x:x[1]))

return list(r.keys())

li = [1.5, 3, 15, 21, 7, 31, 5]

indies = argsort(li)

print(indies)

运行结果:

1[0, 1, 6, 4, 2, 3, 5]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值