如何按顺序计算列表的重复数量
我想知道计算列表重复数量的有效方法是什么。
这是示例:
数字 = [5, 10,10,10, 15,15, 8,8,8,8]
答案 = [1,3,2,4]
.
这是我想出来的代码……但似乎效率低下。
answer=[]
now = numbers[0]
count=1
done=False
for n in numbers[1:]:
if now == n:
count+=1
done=False
else:
answer.append(count)
count=1
now=n
done=True
if(not done):
answer.append(count)
if(done):
answer.append(1)
return answer
有没有人对此有好的答案?
回答
您可以使用内置的groupby来做到这一点
>>> from itertools import groupby
>>> numbers = [5, 10,10,10, 15,15, 8,8,8,8]
>>> [len(list(g)) for k, g in groupby(numbers)]
[1, 3, 2, 4]
groupby(iterable, key=None)生成一个迭代器,它从可迭代对象(numbers在本例中)返回连续的键和组。键是为每个元素计算键值的函数。如果未指定或 is None,则 key 默认为标识函数并返回未更改的元素。