sorted([2, float('nan'), 1]) 回报 [2, nan, 1]
(至少在Activestate Python 3.1实现上.)
我理解这nan是一个奇怪的对象,所以如果它出现在排序结果中的随机位置,我不会感到惊讶.但它也混淆了容器中非纳米数的排序,这实在是出乎意料.
我问了一个相关的问题有关max,并根据我理解为什么sort是这样工作的.但是,这应该被视为一个错误吗?
文档只是说"返回一个新的排序列表[...]"而没有指定任何细节.
编辑:我现在同意这不违反IEEE标准.但是,我认为这是任何常识观点的错误.即使微软经常承认自己的错误,也已经认识到这个错误,并将其修复为最新版本:http://connect.microsoft.com/VisualStudio/feedback/details/363379/bug- in-list-double-sort-in-list-which-contains-double-nan.
无论如何,我最终关注@ khachik的回答:
sorted(list_, key = lambda x : float('-inf') if math.isnan(x) else x)
Run Code Online (Sandbox Code Playgroud)
我怀疑它与默认情况下的语言相比会导致性能下降,但至少它可行(除非我介绍的任何错误).