查找python列表中元素是否连续出现n次

2024-04-14

myList = [True, True, False, False, True, False, True, False, False]

我想知道 True 是否连续出现 3 次。

我可以通过执行以下操作找到它:

for x0, x1, x2 in zip(myList, myList[1:], myList[2:]):
    if x0 == True and x1 == True and x2 == True:
        print True

有没有更好的办法?


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.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找python列表中元素是否连续出现n次 的相关文章

随机推荐