一尘不染

Python:最大/最小内置函数取决于参数顺序

python

max(float('nan'), 1) 评估为nan

max(1, float('nan')) 评估为1

这是预期的行为吗?


感谢您的回答。

max当iterable为空时引发异常。为什么Pythonmax出现时不引发异常nan?或者至少做一些有用的事情,例如returnnan或ignore
nan。当前的行为非常不安全,似乎完全不合理。


阅读 142

收藏
2020-12-20

共1个答案

一尘不染

In [19]: 1>float(‘nan’)
Out[19]: False

In [20]: float('nan')>1
Out[20]: False

浮点数nan不得大于或小于整数1max首先选择第一个元素,然后仅在找到严格更大的元素时才替换它。

In [31]: max(1,float('nan'))
Out[31]: 1

由于nan不大于1,因此返回1。

In [32]: max(float('nan'),1)
Out[32]: nan

由于1不大于nannan因此返回。


PS。请注意,np.max对待方式float('nan')有所不同:

In [36]: import numpy as np
In [91]: np.max([1,float('nan')])
Out[91]: nan

In [92]: np.max([float('nan'),1])
Out[92]: nan

但是,如果您想忽略np.nans,则可以使用np.nanmax

In [93]: np.nanmax([1,float('nan')])
Out[93]: 1.0

In [94]: np.nanmax([float('nan'),1])
Out[94]: 1.0
2020-12-20