返回python列表中的第一个非NaN值

时间:2014-03-02 15:27:49

标签: python list python-2.7

从此列表中返回第一个非纳米值的最佳方法是什么?

testList = [nan, nan, 5.5, 5.0, 5.0, 5.5, 6.0, 6.5]

编辑:

nan是一个浮动

4 个答案:

答案 0 :(得分:5)

您可以使用nextgenerator expressionmath.isnan

>>> from math import isnan
>>> testList = [float('nan'), float('nan'), 5.5, 5.0, 5.0, 5.5, 6.0, 6.5]
>>> next(x for x in testList if not isnan(x))
5.5
>>>

答案 1 :(得分:2)

如果您正在做很多事情,请将其放入函数中以使其易读且易于使用:

import math

t = [float('nan'), float('nan'), 5.5, 5.0, 5.0, 5.5, 6.0, 6.5]

def firstNonNan(listfloats):
  for item in listfloats:
    if math.isnan(item) == False:
      return item

firstNonNan(t)
5.5

答案 2 :(得分:0)

如果您使用的是NumPy,那将非常容易:

array[numpy.isfinite(array)][0]

...返回NumPy数组“数组”中的第一个有限(非NaN和非inf)值。

答案 3 :(得分:0)

下面的一行lambda:

from math import isnan
lst = [float('nan'), float('nan'), 5.5, 5.0, 5.0, 5.5, 6.0, 6.5]

lst
[nan, nan, 5.5, 5.0, 5.0, 5.5, 6.0, 6.5]

第一个nan值

lst[lst.index(next(filter(lambda x: not isnan(x), lst)))]
5.5

获取第一个nan值的列表索引

lst.index(next(filter(lambda x: not isnan(x), lst)))
2