Python 计算列表中连续相同值的数目

Python 计算列表中连续相同值的数目,python,python-3.x,Python,Python 3.x,我有一个二进制值列表:1=可同步,0=不可同步。每个二进制值表示一个人当天是否可同步 person1=[1,1,0,1,1,0,1,1,1] 我想做另一个列表,计算一个人可以连续同步多少天。当出现0时,计数器基本重置 因此,对于上面的示例,输出如下所示: person1=[1,2,0,1,2,0,1,2,3] 我的问题是每当列表遇到0时。我不知道如何让它复位。我试过几种方法,但都不管用 x=[1,1,1,1,1] y=[] for index, value in enumerate(x):

我有一个二进制值列表:1=可同步,0=不可同步。每个二进制值表示一个人当天是否可同步

person1=[1,1,0,1,1,0,1,1,1]
我想做另一个列表,计算一个人可以连续同步多少天。当出现0时,计数器基本重置

因此,对于上面的示例,输出如下所示:

person1=[1,2,0,1,2,0,1,2,3]
我的问题是每当列表遇到0时。我不知道如何让它复位。我试过几种方法,但都不管用

x=[1,1,1,1,1]
y=[]

for index, value in enumerate(x):
     y.append(value+sum(x[:index]))

print(y)
...

[1, 2, 3, 4, 5]
感谢您的帮助。我认为使用递归可能会有所帮助。

这样做:

i = 0
y = []
for value in person1:
    if value:
        i += 1
    else:
        i = 0
    y.append(i)
没有理由创建一个列表。您只需要跟踪计数器。

使用,您可以生成一个包含同步总和的列表

import itertools

person1=[1,1,0,1,1,0,1,1,1]
syncs = [sum(v) for _, v in itertools.groupby(person1)]
输出:

[2, 0, 2, 0, 3]
如果您只想获得此人可同步的最连续天数,只需执行以下操作:

max_syncs = max[sum(v) for _, v in itertools.groupby(person1) if _]

不要在列表上使用sum,那样会越来越慢。而是在for循环外部设置一个变量,该变量最初为0;然后每1天加1,如果看到0,则将其设置为0。谢谢您的回答!你能解释一下列表理解中的“如果”部分是做什么的吗?你可以找到关于u3;的参考资料。