根据价值对浮动列表进行排序的最佳方法是什么,同时仍保留初始订单的记录。
即。排序a:
a=[2.3, 1.23, 3.4, 0.4]
返回类似
的内容a_sorted = [0.4, 1.23, 2.3, 3.4]
a_order = [4, 2, 1, 3]
如果你抓住我的漂移。
答案 0 :(得分:15)
你可以这样做:
>>> sorted(enumerate(a), key=lambda x: x[1])
[(3, 0.4), (1, 1.23), (0, 2.3), (2, 3.4)]
如果您需要索引以1而不是0开头,enumerate
接受第二个参数。
答案 1 :(得分:5)
enumerate
生成序列号。sorted
和key
按浮点数排序zip
将值与值例如:
a_order, a_sorted = zip(*sorted(enumerate(a), key=lambda item: item[1]))
答案 2 :(得分:3)
如果您安装了numpy
:
import numpy
a=[2.3, 1.23, 3.4, 0.4]
a_sorted = numpy.sorted(a)
a_order = numpy.argsort(a)
答案 3 :(得分:0)
from itertools import izip
a_order, a_sorted = [list(b) for b in izip(*sorted(enumerate(a, 1), key=lambda n: n[1]))]