如何计算python列表中的连续重复项

时间:2016-09-06 03:46:58

标签: python python-3.x

我有一个如下列表,仅包含(-1)s和1s:

list1=[-1,-1,1,1,1,-1,1]

我试图将连续重复的数量附加到列表中,例如:

count_dups=[2,3,1,1] 

我尝试创建新列表并使用zip函数作为第一步,但是 由于截止终值

,似乎无法继续下去
list2=list1[1:]
empty=[]
for x,y in zip(list1,list2):
    if x==y:
        empty.append(x)
    else:
        empty.append(0)

3 个答案:

答案 0 :(得分:4)

您可以使用itertools.groupby

from itertools import groupby
list1 = [-1, -1, 1, 1, 1, -1, 1]
count_dups = [sum(1 for _ in group) for _, group in groupby(list1)]
print(count_dups)

<强>输出

[2, 3, 1, 1]

答案 1 :(得分:0)

def count_dups(L):
    ans = []
    if not L:
        return ans
    running_count = 1
    for i in range(len(L)-1):
        if L[i] == L[i+1]:
            running_count += 1
        else:
            ans.append(running_count)
            running_count = 1
    ans.append(running_count)
    return ans

答案 2 :(得分:0)

def count_dups(lst):
    return reduce(
        lambda a,b: (((a[-1] == b) and (a[:-2] + [a[-2]+1,a[-1]])) or (a[:-1] + [1,b])) ,
        lst[1:] ,
        [1,lst[0]]
    )[:-1]