Ответ 1
Вы можете использовать комбинацию 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})
itertools.groupby
группирует элемент на основе ключа. (по умолчанию ключ - это элементы самого итерабельного)
>>> 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'])]
Здесь первый элемент - это ключ (k
), на основе которого элементы были сгруппированы, а list(g)
- это группа, связанная с этим ключом. Поскольку нас интересует только часть key
, поэтому мы можем передать k
в collections.Counter
, чтобы получить желаемый ответ.