我有一个二进制值列表: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]
感谢任何帮助。我认为使用递归可能有所帮助。
答案 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 _]