11

次のような文字列があります。

string = 'TTHHTHHTHHHHTTHHHTTT'

文字列の実行回数を数えて、

T の 5 回の実行と H の 4 回の実行

4

2 に答える 2

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})

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

于 2013-09-06T19:52:59.307 に答える