Python如何计算重复项组?

时间:2018-10-21 09:19:15

标签: python

我是python的新手,我面临的问题是如何计算重复项组。例如,给出这样的列表:

['down', 'down', 'down', 'up', 'right', 'right', 'down', 'down']

我必须计算以下内容:

[('down', 3), ('up', 1), ('right', 2), ('down', 2)]

或者更确切地说,如何从像java / c#这样的语言中以pythonic的方式实现这一目标?

编辑:由于似乎我没有足够清楚地说明我的问题,所以我不想统计列表中所有down的出现,而只计算那些是邻居的(如果那样的话)是正确的措词),因此Counter(my_list)不能提供所需的输出。

2 个答案:

答案 0 :(得分:3)

使用itertools.groupby

>>> import itertools
>>> lst = ['down', 'down', 'down', 'up', 'right', 'right', 'down', 'down']
>>> [(value, sum(1 for _ in group)) for value, group in itertools.groupby(lst)]
[('down', 3), ('up', 1), ('right', 2), ('down', 2)]

答案 1 :(得分:1)

尝试一下:

from itertools import groupby
[(c,len(list(cgen))) for c,cgen in groupby(a)]