首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何返回排序列表的索引?

如何返回排序列表的索引?
EN

Stack Overflow用户
提问于 2011-10-21 22:43:23
回答 6查看 243.5K关注 0票数 159

我需要对一个列表进行排序,然后返回一个带有列表中已排序项目索引的列表。例如,如果我想要排序的列表是[2,3,1,4,5],我需要返回[2,0,1,3,4]

这个问题是以字节为单位发布的,但我想我应该在这里重新发布它。http://bytes.com/topic/python/answers/44513-sorting-list-then-return-index-sorted-item

我特别需要根据对象的属性对对象列表进行排序。然后,我需要对相应的列表进行重新排序,以匹配新排序列表的顺序。

有什么好方法可以做到这一点吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-10-21 22:50:39

您可以使用python排序函数的key参数对索引数组进行排序。

代码语言:javascript
复制
>>> s = [2, 3, 1, 4, 5, 3]
>>> sorted(range(len(s)), key=lambda k: s[k])
[2, 0, 1, 5, 3, 4]
>>> 
票数 286
EN

Stack Overflow用户

发布于 2011-10-21 22:54:54

如果您有可用的numpy,您可以使用numpy的argsort方法来完成此操作:

代码语言:javascript
复制
>>> 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])

如果不可用,可从this question获取,这是最快的方法:

代码语言:javascript
复制
>>> vals = [2,3,1,4,5]
>>> sorted(range(len(vals)), key=vals.__getitem__)
[2, 0, 1, 3, 4]
票数 81
EN

Stack Overflow用户

发布于 2011-10-21 22:52:22

怎么样

代码语言:javascript
复制
l1 = [2,3,1,4,5]
l2 = [l1.index(x) for x in sorted(l1)]
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7851077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档