Мы могли бы использовать Regex:
>>> import re
>>> r = re.compile(r'(.)\1*')
>>> [m.group() for m in r.finditer('AAABBBCDEEEEBBBAA')]
['AAA', 'BBB', 'C', 'D', 'EEEE', 'BBB', 'AA']
В качестве альтернативы мы могли бы использовать itertools.groupby
.
>>> import itertools
>>> [''.join(g) for k, g in itertools.groupby('AAABBBCDEEEEBBBAA')]
['AAA', 'BBB', 'C', 'D', 'EEEE', 'BBB', 'AA']
timeit
показывает, что Regex работает быстрее (для этой конкретной строки) ( Python 2.6 , Python 3.1 ). Но Regex, в конце концов, специализируется на string, а groupby
- универсальная функция, так что это не так уж неожиданно.