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)
可以这样做吗?
使用自定义排序键,取小数部分.您可以使用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)
| 归档时间: |
|
| 查看次数: |
590 次 |
| 最近记录: |