相关疑难解决方法(0)

Python:在存在nan的情况下,sort函数会中断

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)

我怀疑它与默认情况下的语言相比会导致性能下降,但至少它可行(除非我介绍的任何错误).

python sorting math nan

29
推荐指数
4
解决办法
5855
查看次数

标签 统计

math ×1

nan ×1

python ×1

sorting ×1