我怎样才能在列表中找到3个正确的答案?

2024-04-19 20:13:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个真与假的清单,每当我有3个重复的真时,我都要数一数

my_list=[True, True, True, True,False, True, True,False]

输出: 由于前3个元素为真,第二到第四个元素也为真,因此输出为2

count=2

我做了以下操作,但是如果我愿意,我正在寻找一种更好的方法来改变3

count=0
for j in my_list:
    if my_list[j]==True and my_list[j+1]==True and my_list[j+2]==True:

count=count+1

Tags: and方法infalsetrue元素forif
3条回答

可以将列表切片与all结合使用

consec = 3
count = 0
my_list = [True, True, True, True,False, True, True,False]
for i in range(len(my_list) - consec + 1):
    if all(my_list[i:i+consec]):
        count += 1
print(count)

这也可以用sum(如Mark Ransom注释)写在一行中

count = sum(all(my_list[i:i+consec]) for i in range(len(my_list) - consec + 1))

您可以使用^{},对于每个组,获取长度并减去2以添加到count

from itertools import groupby

n = 3
count = 0
for k, g in groupby(my_list):
    if k == True:
        length = sum(1 for _ in g)
        if length >= n:
            count += length - n + 1
print(count)  # -> 2

从索引0到len(my_list)-2,您只需要一个for循环,然后对于每个迭代,从当前索引开始查找3个连续元素的总和(在python中为True=1和False=0)

In [1]: my_list=[True, True, True, True,False, True, True,False]

In [2]: count = sum(1 for i in range(len(my_list)-2) if sum(my_list[i:i+3]) == 3)

In [3]: count
Out[3]: 2

对于任何n:

def f(lst: list, n: int):
    return sum(1 for i in range(len(lst)-n+1) if sum(lst[i:i+n])==n)

相关问题 更多 >