次のような文字列があります。
string = 'TTHHTHHTHHHHTTHHHTTT'
文字列の実行回数を数えて、
T の 5 回の実行と H の 4 回の実行
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
キーに基づいて項目をグループ化します (デフォルトでは、キーは 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'])]
ここで、最初の項目は、k
項目がグループ化されたキー ( ) であり、list(g)
そのキーに関連するグループです。私たちは部分的にしか興味がないので、目的の答えを得るためにkey
渡すことができk
ます。collections.Counter