如何按顺序计算列表的重复数量

我想知道计算列表重复数量的有效方法是什么。

这是示例:

数字 = [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 默认为标识函数并返回未更改的元素。


以上是如何按顺序计算列表的重复数量的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>