gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:21:46 34 4
gpt4 key购买 nike

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

有没有更好的办法?

最佳答案

使用itertools.groupby()对元素进行分组,然后计算每个组。使用 any() function如果找到匹配项,让您提前退出循环:

from itertools import groupby, islice

print any(sum(1 for _ in islice(g, 3)) == 3 for k, g in groupby(myList) if k)

if k 过滤组以仅计算 True 值的组。

itertools.islice() function确保我们只查看组的前 3 个元素,而忽略该组的其余部分。这样一来,您就不必为了确定至少找到 3 个而必须计算下一个 True 值的数量。

演示:

>>> 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 值。

关于python - 查找元素是否在python列表中连续出现n次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26408462/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com