我正在尝试在python中对浮点数列表(和nan值)进行排序:
print max(list)
list.sort()
list.reverse()
for i in range(100):
print list[i]
nan
nan
2.0803176458
nan
nan
23.1620761136
15.9680303803
15.3134388394
14.68055076
11.450492644
8.96268420227
8.15331554187
5.24420616524
3.9665322752
3.69758305442
1.08500491226
-0.227894225141
-0.254784399765
-0.866879940573
-1.21267324819
-2.21811678021
nan
nan
2.69325878444
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到的最大次数最多是不同的值,并且我的列表在打印出来时没有排序(结果在上面的代码下)
是否有人对此有何见解?
>>> float('nan') < 3.14
False
>>> float('nan') > 3.14
False
>>> float('nan') < float('nan')
False
>>> float('nan') > float('nan')
False
>>> float('nan') == float('nan')
False
Run Code Online (Sandbox Code Playgroud)
问题在于,nan没有相对于其他数字的排序。无论是与数字还是其他nan值进行比较,比较总是返回False 。的合同sort()要求列表项具有一致的顺序才能正确排序。
要进行排序,nan您需要覆盖此行为并定义要nan如何排序。例如,如果您希望它出现在所有其他数字之前,则可以使用一个key函数将其nan等同于-inf。
>>> l = [float('nan'), 3.14, -1, 0, float('nan')]
>>> import math
>>> sorted(l, key=lambda f: float('-inf') if math.isnan(f) else f)
[nan, nan, -1, 0, 3.14]
Run Code Online (Sandbox Code Playgroud)