我想用十进制数对数字列表进行排序,而不管小数点左边的数字。例如,如果:
some_list = [5.43, 12.01, 10.23, 3.33]
然后排序的列表应为:
some_list_sorted = [12.01, 10.23, 3.33, 5.43]
能做到吗?
答案 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]