Use itertools.groupby() https://docs.python.org/2/library/itertools.html#itertools.groupby对元素进行分组,然后对每个组进行计数。使用any()功能 https://docs.python.org/2/library/functions.html#any如果找到匹配项,您可以提前退出循环:
from itertools import groupby, islice
print any(sum(1 for _ in islice(g, 3)) == 3 for k, g in groupby(myList) if k)
The if k
过滤组以仅计算以下组True
values.
The itertools.islice()功能 https://docs.python.org/2/library/itertools.html#itertools.islice确保我们只查看组中的前 3 个元素,而忽略该组的其余元素。这样你就可以避免计算下一个的数量True
值只是为了确定您至少找到了 3 个。
Demo:
>>> from itertools import groupby, islice
>>> myList = [True, True, False, False, True, False, True, False, False]
>>> [sum(1 for _ in islice(g, 3)) for k, g in groupby(myList) if k]
[2, 1, 1]
>>> any(sum(1 for _ in islice(g, 3)) == 3 for k, g in groupby(myList) if k)
False
>>> myList = [True, True, False, False, True, True, True, True, False, True, False, False]
>>> [sum(1 for _ in islice(g, 3)) for k, g in groupby(myList) if k]
[2, 3, 1]
>>> any(sum(1 for _ in islice(g, 3)) == 3 for k, g in groupby(myList) if k)
True
我使用列表理解来显示组大小(仅计算True
组)来说明为什么any()
来电返回False
首先,然后True
;第二个示例有一组 4 个连续的True
values.