一日一学:返回排序好的列表的索引顺序

总第 118 篇文章,本文大约 700 字,阅读大约需要  分钟

今天介绍的是对列表排序后,返回排序好的索引顺序。


问题描述:给定一个列表 [2, 3, 1, 4, 5] ,怎么返回排序后的索引顺序,即 [2,0,1,3,4] ?

解决方法:

方案1: 利用 sorted 函数,例子如下所示:

>>> s = [2, 3, 1, 4, 5]
>>> sorted(range(len(s)), key=lambda k: s[k])
[2, 0, 1, 3, 4]
>>>

方案2: 采用 itemgetter 函数:

L = [2,3,1,4,5]
from operator import itemgetter
indices, L_sorted = zip(*sorted(enumerate(L), key=itemgetter(1)))
list(L_sorted)
>>> [1, 2, 3, 4, 5]
list(indices)
>>> [2, 0, 1, 3, 4]

方案3: 利用 numpyargsort 函数:

>>> import numpy
>>> vals = numpy.array([2,3,1,4,5])
>>> vals
array([2, 3, 1, 4, 5])
>>> sort_index = numpy.argsort(vals)
>>> sort_index
array([2, 0, 1, 3, 4])

参考文章:

https://stackoverflow.com/questions/7851077/how-to-return-index-of-a-sorted-list?answertab=active#tab-top

也可以点击原文查看。

ps. 今天也祝大家情人节快乐

单身的2020年脱单成功!


    精选文章

  1. python版代码整洁之道

  2. python技巧(1)--如何转换itertools.chain对象为数组

  3. python技巧(2)--碾平列表和列表去重

  4. 几个有趣的python技巧

  5. 10个高效的pandas技巧

欢迎关注我的微信公众号--算法猿的成长,或者扫描下方的二维码,大家一起交流,学习和进步!

如果觉得不错,在看、转发就是对小编的一个支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

spearhead_cai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值