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

时间:2016-03-11 19:29:12

标签: 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):
     y.append(value+sum(x[:index]))

print(y)
...

[1, 2, 3, 4, 5]

感谢任何帮助。我认为使用递归可能有所帮助。

2 个答案:

答案 0 :(得分:2)

这样做:

i = 0
y = []
for value in person1:
    if value:
        i += 1
    else:
        i = 0
    y.append(i)

没有理由创建一个列表。你只需要跟踪一个计数器。

答案 1 :(得分:2)

使用itertools.groupby,您可以生成包含同步总和的列表。

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]

如果你只是想连续几天这个人可以同步和#34;那就做:

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