我是python的新手,我面临的问题是如何计算重复项组。例如,给出这样的列表:
['down', 'down', 'down', 'up', 'right', 'right', 'down', 'down']
我必须计算以下内容:
[('down', 3), ('up', 1), ('right', 2), ('down', 2)]
或者更确切地说,如何从像java / c#这样的语言中以pythonic的方式实现这一目标?
编辑:由于似乎我没有足够清楚地说明我的问题,所以我不想统计列表中所有down
的出现,而只计算那些是邻居的(如果那样的话)是正确的措词),因此Counter(my_list)
不能提供所需的输出。
答案 0 :(得分:3)
>>> 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)]