如何仅按小数排序列表?

时间:2014-07-06 07:23:11

标签: python list sorting python-2.7 floating-point

我想用十进制数对数字列表进行排序,而不管小数点左边的数字。例如,如果:

some_list = [5.43, 12.01, 10.23, 3.33]

然后排序的列表应为:

some_list_sorted = [12.01, 10.23, 3.33, 5.43]

能做到吗?

1 个答案:

答案 0 :(得分:6)

使用自定义排序键,取小数部分。您可以使用math.modf()将浮点值拆分为十进制和整数部分:

import math

sorted(some_list, key=lambda f: math.modf(f))

或使用% 1来实现相同目标:

sorted(some_list, key=lambda f: f % 1)

它们处理关系的方式不同;在这种情况下,% 1忽略整数部分,并以原始(相对)顺序保留数字,而math.modf()选项将在较高的整数部分之前对其进行排序。

math.modf()也会保留符号,而模数1会忽略它:

>>> math.modf(-12.01)
(-0.009999999999999787, -12.0)
>>> -12.01 % 1
0.9900000000000002

选择适合您用例的那个。

演示:

>>> import math
>>> some_list = [5.43, 12.01, 10.23, 3.33]
>>> sorted(some_list, key=lambda f: math.modf(f))
[12.01, 10.23, 3.33, 5.43]
>>> sorted(some_list, key=lambda f: f % 1)
[12.01, 10.23, 3.33, 5.43]