4

我有一个元组列表(字符串,浮点数)列表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)]
4

4 回答 4

3

您可以使用自定义键,这将返回一个非常高的值NaN

min(list, key=lambda x: float('inf') if math.isnan(x[1]) else x[1])
于 2013-03-01T01:09:03.320 回答
1

你也可以试试这个:

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

其中itemgetteroperator.itemgetter.

于 2013-03-01T01:14:27.647 回答
0
>>> 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)

我不认为 nan 被认为比普通花车小。可能 min 按字母顺序比较字符串。

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

于 2013-03-01T01:24:09.067 回答
0
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

在空列表上失败,但可以解决问题。

于 2013-03-01T01:32:16.257 回答