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