0

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

4

1 回答 1

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]))
[]
于 2013-02-15T14:39:07.903 回答