我有一个看起来像这样的字符串:
string = 'TTHHTHHTHHHHTTHHHTTT'
Run Code Online (Sandbox Code Playgroud)
如何计算字符串中的运行次数,以便我得到,
5次运行T和4次运行H.
Ash*_*ary 21
您可以使用组合itertools.groupby和collections.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部分,因此,我们可以通过k以collections.Counter获得所需的答案.