我正在处理一个非常大的数据集。 数据集由数据配置文件组成,每个配置文件存储在一个数组中。 我需要为每个数组找到连续的一系列值,包括第一个值,并匹配一个条件(值> = 26)。
示例:
表示输入值= [30.1, 29.7, 28.5, 27.1, 20, 17, 16]
算法返回[30.1, 29.7, 28.5, 27.1]
表示输入值= [30.1, 29.7, 28.5, 27.1, 20, 17, 28, 27]
算法返回[30.1, 29.7, 28.5, 27.1]
表示输入值= [25, 30.1, 29.7, 28.5, 27.1, 20, 17, 28, 27]
算法返回None
我可以解析数组并进行“if”测试,但考虑到我要分析数十万个系列,我正在寻找更优化的东西。
答案 0 :(得分:5)
这可以通过itertools.takewhile恰当地完成,它返回元素直到谓词为假。
以下是使用itertools.takewhile
的示例>>> from itertools import takewhile
>>> list(takewhile(lambda e:e>=26, [30.1, 29.7, 28.5, 27.1, 20, 17, 16]))
[30.1, 29.7, 28.5, 27.1]
对于最后一个例子,尽管它没有返回None
,但是它是一个空的可迭代,你可以轻松地模拟以满足你的要求
>>> list(takewhile(lambda e:e>=26, [25, 30.1, 29.7, 28.5, 27.1, 20, 17, 28, 27]))
[]