程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Python:在存在nan的情况下排序功能中断大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Python:在存在Nan的情况下排序功能中断?

开发过程中遇到Python:在存在Nan的情况下排序功能中断的问题如何解决?下面主要结合日常开发的经验,给出你关于Python:在存在Nan的情况下排序功能中断的解决方法建议,希望对你解决Python:在存在Nan的情况下排序功能中断有所启发或帮助;

先前的答案很有用,但对于问题的根源可能不清楚。

在任何语言中,sort都会在输入值的范围内应用由比较功能或其他方式定义的给定顺序。例如,operator <,当且仅当小于定义输入值的适当排序时,才可以使用小于号。

但是,对于浮点值和小于以下的值,这不是特别正确的:“ NaN是无序的:它不等于,大于或小于任何值,包括其自身。” ( 但适用于所有IEEE754基于现代的 )

因此,可能的解决方案是:

两种方法都可以使用任何一种语言。

实际上,虑到python,如果您不太关心最快的性能或者上下文中是否需要删除NaN,则我宁愿删除NaN。

否则,您可以通过较旧的python版本中的“ cmp”或通过使用and来使用合适的谓词函数functools.cmp_to_key()。自然,后者要比先去除NaN更尴尬。和关怀将被要求避免 糟糕的 表现,定义这个谓词功能时。

解决方法

sorted([2,float('nan'),1]) 退货 [2,nan,1]

(至少在Activestate Python 3.1实现上。)

我知道这nan是一个奇怪的对象,因此如果它出现在排序结果中的随机位置,我不会感到惊讶。但这也弄乱了容器中非南数的排序,这确实是出乎意料的。

我问了一个相关的问题有关@H_532_5@max,并根据我理解为什么sort是这样工作的。但这应该被视为错误吗?

文档只是说“返回一个新的排序列表”,而没有指定任何详细信息。

编辑:我现在同意这不违反IEEE标准。但是,我认为,从任何常识角度来看,这都是一个错误。甚至不知道经常承认错误的Microsoft都已将此错误识别为错误,并在最新版本中对其进行了修复:http :
//connect.microsoft.com/Visualstudio/feedBACk/details/363379/bug-
在列表中的双重排序在列表中包含double
nan。

无论如何,我最终遵循了@khachik的回答:

sorted(list_,key = lambda x : float('-inf') if math.isnan(X) else X)

与默认情况下执行该操作的语言相比,我怀疑它会导致性能下降,但至少它能起作用(除非我引入了任何错误)。

大佬总结

以上是大佬教程为你收集整理的Python:在存在nan的情况下排序功能中断全部内容,希望文章能够帮你解决Python:在存在nan的情况下排序功能中断所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。