下面这个解法应该足够 pythonic 了:
# -*- coding: utf-8 -*-
def split_seq(s):
import re
# sep shouldn't conflict with any substring in s, so we make it a little weird ~
sep = '<[|]>'
separated_s = re.sub(r'(.)\1*', lambda m: m.group(0)+sep, s)
return separated_s.split(sep)[:-1]
def count_seq(s):
lst = split_seq(s)
return [(s[0],len(s)) for s in lst]
s = 'TTFTTTFFFFTFFTT'
print(split_seq(s))
print(count_seq(s))
# ==================== the result ====================
# ['TT', 'F', 'TTT', 'FFFF', 'T', 'FF', 'TT']
# [('T', 2), ('F', 1), ('T', 3), ('F', 4), ('T', 1), ('F', 2), ('T', 2)]