Return python 列表中的前 n 个非 NaN 值
Return first n non NaN value in python list
如何获取返回列表的前 n 个非 nan 值的元素?
例如:
lst = [nan, nan, nan, nan, nan, nan, nan, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
n = 3
Output: [1,2,3]
谢谢。
您可以将 itertools.filterfalse()
与 math.isnan()
一起使用:
import math, itertools
nan = float("nan")
lst = [nan, nan, nan, nan, nan, nan, nan, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(itertools.islice(itertools.filterfalse(math.isnan, lst), 3))
itertools的使用主要是优化,可以用普通的切片代替:
[i for i in lst if not math.isnan(i)][:3]
正如@Pranav 在评论中强调的那样,即使第一种方法看起来有点复杂,它也会阻止处理整个列表,并在遇到前 3 个 non-nan 数字时立即停止。当您有大型列表时, 效率更高。
如何获取返回列表的前 n 个非 nan 值的元素?
例如:
lst = [nan, nan, nan, nan, nan, nan, nan, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
n = 3
Output: [1,2,3]
谢谢。
您可以将 itertools.filterfalse()
与 math.isnan()
一起使用:
import math, itertools
nan = float("nan")
lst = [nan, nan, nan, nan, nan, nan, nan, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(itertools.islice(itertools.filterfalse(math.isnan, lst), 3))
itertools的使用主要是优化,可以用普通的切片代替:
[i for i in lst if not math.isnan(i)][:3]
正如@Pranav 在评论中强调的那样,即使第一种方法看起来有点复杂,它也会阻止处理整个列表,并在遇到前 3 个 non-nan 数字时立即停止。当您有大型列表时, 效率更高。