计算lis中连续相同值的数目

2024-09-30 12:25:21 发布

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

我有一个二进制值列表:1=syncable,0=unsyncable。每个二进制值表示一个人当天是否可以同步。你知道吗

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]

感谢您的帮助。我认为使用递归可能会有所帮助。你知道吗


Tags: 方法in示例列表forindexvalue二进制
2条回答

使用^{},您可以生成一个同步总数为的列表。你知道吗

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 _]

请执行以下操作:

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

没有理由创建一个列表。你只需要跟踪一个柜台。你知道吗

相关问题 更多 >

    热门问题