今天介绍的是对列表排序后,返回排序好的索引顺序。
问题描述:给定一个列表 [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: 利用 numpy
的 argsort
函数:
>>> 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年脱单成功!