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

新手上路,请多包涵

我有一个列表如下,仅包含 (-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)

原文由 Cameron Hiruta 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 639
2 个回答

您可以使用 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]

原文由 Karin 发布,翻译遵循 CC BY-SA 3.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

原文由 BallpointBen 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题