大佬教程收集整理的这篇文章主要介绍了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,请注明来意。