这个列表中返回第一个非NaN值的最佳方法是什么?
testList = [nan, nan, 5.5, 5.0, 5.0, 5.5, 6.0, 6.5]
编辑:
nan是一个浮点数
testList = [nan, nan, 5.5, 5.0, 5.0, 5.5, 6.0, 6.5]
编辑:
nan是一个浮点数
您可以使用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
>>>
array[numpy.isfinite(array)][0]
...返回NumPy数组“array”中第一个有限值(非NaN和非inf)。
list(np.isfinite(array)).count(False)
。 - Sjotrollimport 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
以下是一行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
next(x for x in testList if x == x)
也可以工作,并且可能会更快,因为它避免了很多函数查找(虽然相当难读懂)。 - Bakuriu