计数以字符串形式运行

cod*_*kid 11 python string

我有一个看起来像这样的字符串:

string = 'TTHHTHHTHHHHTTHHHTTT'
Run Code Online (Sandbox Code Playgroud)

如何计算字符串中的运行次数,以便我得到,

5次运行T和4次运行H.

Ash*_*ary 21

您可以使用组合itertools.groupbycollections.Counter:

>>> from itertools import groupby
>>> from collections import Counter
>>> strs = 'TTHHTHHTHHHHTTHHHTTT'
>>> Counter(k for k, g in groupby(strs))
Counter({'T': 5, 'H': 4})
Run Code Online (Sandbox Code Playgroud)

itertools.groupby 根据键对项目进行分组.(默认情况下,键是iterable本身中的项目)

>>> from pprint import pprint
>>> pprint([(k, list(g)) for k, g in groupby(strs)])
[('T', ['T', 'T']),
 ('H', ['H', 'H']),
 ('T', ['T']),
 ('H', ['H', 'H']),
 ('T', ['T']),
 ('H', ['H', 'H', 'H', 'H']),
 ('T', ['T', 'T']),
 ('H', ['H', 'H', 'H']),
 ('T', ['T', 'T', 'T'])]
Run Code Online (Sandbox Code Playgroud)

这里的第一项是key(k),基于该键对项进行分组,并且list(g)是与该键相关的组.由于我们只对感兴趣的key部分,因此,我们可以通过kcollections.Counter获得所需的答案.