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

use*_*196 2 python list python-2.7

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

testList = [nan, nan, 5.5, 5.0, 5.0, 5.5, 6.0, 6.5]
Run Code Online (Sandbox Code Playgroud)

编辑:

nan是一个浮子

iCo*_*dez 6

您可以使用next,生成器表达式,以及math.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
>>>
Run Code Online (Sandbox Code Playgroud)


小智 6

如果您使用 NumPy,这将非常容易:

array[numpy.isfinite(array)][0]
Run Code Online (Sandbox Code Playgroud)

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


Eri*_*ski 3

如果您经常这样做,请将其放入一个函数中以使其可读且简单:

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
Run Code Online (Sandbox Code Playgroud)