我需要对一个列表进行排序,然后返回一个带有列表中已排序项目索引的列表。例如,如果我想要排序的列表是[2,3,1,4,5]
,我需要返回[2,0,1,3,4]
。
这个问题是以字节为单位发布的,但我想我应该在这里重新发布它。http://bytes.com/topic/python/answers/44513-sorting-list-then-return-index-sorted-item
我特别需要根据对象的属性对对象列表进行排序。然后,我需要对相应的列表进行重新排序,以匹配新排序列表的顺序。
有什么好方法可以做到这一点吗?
发布于 2011-10-21 22:50:39
您可以使用python排序函数的key
参数对索引数组进行排序。
>>> s = [2, 3, 1, 4, 5, 3]
>>> sorted(range(len(s)), key=lambda k: s[k])
[2, 0, 1, 5, 3, 4]
>>>
发布于 2011-10-21 22:54:54
如果您有可用的numpy,您可以使用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])
如果不可用,可从this question获取,这是最快的方法:
>>> vals = [2,3,1,4,5]
>>> sorted(range(len(vals)), key=vals.__getitem__)
[2, 0, 1, 3, 4]
发布于 2011-10-21 22:52:22
怎么样
l1 = [2,3,1,4,5]
l2 = [l1.index(x) for x in sorted(l1)]
https://stackoverflow.com/questions/7851077
复制相似问题