如何在列表中捕捉3个true?

eqfvzcg8  于 2021-09-08  发布在  Java
关注(0)|答案(7)|浏览(316)

我有一个真与假的清单,每当我有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
dphi5xsq

dphi5xsq1#

可以将列表切片与 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 (如马克·勒森所言)。

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

xam8gpfp2#

从索引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)
o3imoua4

o3imoua43#

你可以用 groupby 对于每组,得到长度,减去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
jljoyd4f

jljoyd4f4#

添加一行,变化不大(列表理解)。

consec = 3
print(sum([1 for i in range(len(my_list)) if len(my_list[i:i+consec]) == consec and all(my_list[i:i+consec])]))

信用证:未缓和

xxls0lw8

xxls0lw85#

my_list=[True, True, True, True,False, True, True,False]
my_var=0
count_var=0
for i in my_list:
    if i==True:
        my_var+=1
    if my_var==3:
        count_var+=1
        my_var=0
    if i!=True:
        my_var=0
print(count_var)
5jdjgkvh

5jdjgkvh6#

下面介绍如何使用带有状态变量的老式循环:

n = 3

consec = 0
count = 0
for i in my_list:
    if i == True:
        consec += 1
    else:
        consec = 0

    if consec >= n:
        count += 1

print(count)  # -> 2

这是基于albert_编码的答案,但它们的实现不起作用。

vaqhlq81

vaqhlq817#

my_list=[True, True, True, True,False, True, True,False]
def count_it(n):
    x=0
    count_var=0
    for i in range(len(my_list)-n+1):
        print(my_list[i:i+n])
        for i in my_list[i:i+n]:
            if i==True:
                print(1)
                x+=1
            else:
                print(0)
        if x==n:
            print("successful")
            count_var+=1
        x=0
    print(count_var)

count_it(2)

相关问题