排序同时保留python中的顺序

时间:2010-09-16 15:09:00

标签: python sorting

根据价值对浮动列表进行排序的最佳方法是什么,同时仍保留初始订单的记录。

即。排序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]

如果你抓住我的漂移。

4 个答案:

答案 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生成序列号。
  • 使用sortedkey按浮点数排序
  • 使用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]))]