带NaN的元组列表(字符串,浮点)如何获取最小值



我有一个包含float('nan')的元组列表(字符串,浮点(。如何获取数字最小的元组?如果我使用min,我总是得到nan

[('GroundBasedMechWT', nan), ('GroundBasedCTL', nan), ('GroundBasedManualWT', nan), ('GroundBasedManualLog', nan), ('CableManualWTLog', 60.77), ('CableManualWT', 58.52), ('CableManualLog', 68.17), ('CableManualCTL', nan), ('HelicopterManualWT', 96.82), ('HelicopterManualCTL', nan)]

您可以使用自定义密钥,该密钥将为NaN:返回非常高的值

min(list, key=lambda x: float('inf') if math.isnan(x[1]) else x[1])

你也可以试试这个:

min(filter(lambda t: not math.isnan(t[1]), l), key=itemgetter(1))

其中CCD_ 4是指CCD_。

>>> nan=float('NaN')
>>> x=[('GroundBasedMechWT', nan), ('GroundBasedCTL', nan), ('GroundBasedManualWT', nan), ('GroundBasedManualLog', nan), ('CableManualWTLog', 60.77), ('CableManualWT', 58.52), ('CableManualLog', 68.17), ('CableManualCTL', nan), ('HelicopterManualWT', 96.82), ('HelicopterManualCTL', nan)]
>>> nan<1
False
>>> nan<1.0
False
>>> min(x)
('CableManualCTL', nan)

我不认为楠比普通的花车小。min可能正在按字母顺序比较字符串。

(不是一个完整的答案,但可能会有所帮助(

nan=float('NaN')
x=[('GroundBasedMechWT', nan), ('GroundBasedCTL', nan), ('GroundBasedManualWT', nan), ('GroundBasedManualLog', nan), ('CableManualWTLog', 60.77), ('CableManualWT', 58.52), ('CableManualLog', 68.17), ('CableManualCTL', nan), ('HelicopterManualWT', 96.82), ('HelicopterManualCTL', nan)]
val=('foo', float('Inf')) #thanks for teaching me that
for tup in x:
    if tup[1]<val[1]:
        val=tup
print val

在空列表中失败,但在其他方面解决了问题。

最新更新