如何仅按小数排序列表?

Opt*_*esh -2 python sorting floating-point list python-2.7

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

some_list = [5.43, 12.01, 10.23, 3.33]
Run Code Online (Sandbox Code Playgroud)

然后排序列表应该是:

some_list_sorted = [12.01, 10.23, 3.33, 5.43]
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?

Mar*_*ers 6

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

import math

sorted(some_list, key=lambda f: math.modf(f))
Run Code Online (Sandbox Code Playgroud)

或者% 1用来达到同样的目的:

sorted(some_list, key=lambda f: f % 1)
Run Code Online (Sandbox Code Playgroud)

它们处理关系的方式不同; 该% 1忽略在这种情况下的整数部分和叶数在原始(相对)排列,而math.modf()选项将以前高较小的整数部分进行排序.

math.modf() 也保留了标志,而模数1忽略了它:

>>> math.modf(-12.01)
(-0.009999999999999787, -12.0)
>>> -12.01 % 1
0.9900000000000002
Run Code Online (Sandbox Code Playgroud)

选择适合您用例的那个.

演示:

>>> 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]
Run Code Online (Sandbox Code Playgroud)