Python实现获取乱序列表排序后的新下标的示例
短信预约 -IT技能 免费直播动态提醒
对一个列表list而言,进行排序是很简单的。正序排序(从小到大)用
list.sort()
倒序排序(从大到小)用
list.sort(reverse=True)
但是如果不仅限于得到一个排完序的列表,还希望记录原本的下标,那么对于一个numpy.array而言,可以用
np.argsort()
比如[1,3,2,5,6]
排序后变成[1,2,3,5,6]
但是我们想知道排序后的结果对应原本的下标是什么(答案是[0,2,1,3,4]),就可以用np.argsort()
但是如果就是个简单的list,想实现这个效果,就可以用
# enumerate(x)会自动构造一个tuple(a,b)
# 其中a是index,b是list里index下标对应的具体的值,后面的x是代表一个虚拟变量,即tuple(a,b)
sorted_list = sorted(enumerate(list), key=lambda x:x[1]) # x[1]是因为在enumerate(a)中,a数值在第1位
result = [x[0] for x in sorted_list]
这样返回的result就是原本的index
如果要实现标题里的,更进一步,即要得到一个list排序后的新下标,比如对于 [1,5,2,8,3,4],应该得到[0,4,1,5,2,3]
那就可以用
# enumerate(x)会自动构造一个tuple(a,b)
# 其中a是index,b是list里index下标对应的具体的值,后面的x是代表一个虚拟变量,即tuple(a,b)
# sorted_list = [(0,1),(2,2),(4,3),(5,4),(1,5),(3,8)]
sorted_list = sorted(enumerate(list), key=lambda x:x[1]) # x[1]是因为在enumerate(a)中,a数值在第1位
for i in range(len(sorted_list)):
list[sorted_list[i][1]] = i
到此这篇关于Python实现获取乱序列表排序后的新下标的示例的文章就介绍到这了,更多相关Python获取新下标内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341