python:从第一个元素开始查找连续的值列表,匹配条件

时间:2013-02-15 14:37:30

标签: python arrays optimization

我正在处理一个非常大的数据集。 数据集由数据配置文件组成,每个配置文件存储在一个数组中。 我需要为每个数组找到连续的一系列值,包括第一个值,并匹配一个条件(值> = 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”测试,但考虑到我要分析数十万个系列,我正在寻找更优化的东西。

1 个答案:

答案 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]))
[]