python:从第一个元素开始查找满足条件的连续值列表
我正在处理一个非常大的数据集。这个数据集由多个数据档案组成,每个档案都存储在一个数组里。我需要找出每个数组中连续的数值序列,包括第一个数,并且这些数值要满足一个条件(值大于等于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
我可以解析这个数组并进行“如果”测试,但考虑到我有成千上万的序列需要分析,我在寻找更优化的方法。
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]))
[]