如何用python拆分这个字符串?

jan*_*jan 8 python string split

我有一些看起来像这个例子的字符串:"AAABBBCDEEEEBBBAA"

字符串中可以包含任何字符.

我想把它分成如下列表:['AAA','BBB','C','D','EEEE','BBB','AA']

因此,相同字符的每个连续延伸都会转到拆分列表的单独元素.

我知道我可以迭代字符串中的字符,检查每个i和i-1对,如果它们包含相同的字符等,但是那里有更简单的解决方案吗?

ken*_*ytm 15

我们可以使用正则表达式:

>>> import re
>>> r = re.compile(r'(.)\1*')
>>> [m.group() for m in r.finditer('AAABBBCDEEEEBBBAA')]
['AAA', 'BBB', 'C', 'D', 'EEEE', 'BBB', 'AA']
Run Code Online (Sandbox Code Playgroud)

或者,我们可以使用itertools.groupby.

>>> import itertools
>>> [''.join(g) for k, g in itertools.groupby('AAABBBCDEEEEBBBAA')]
['AAA', 'BBB', 'C', 'D', 'EEEE', 'BBB', 'AA']
Run Code Online (Sandbox Code Playgroud)

timeit显示Regex更快(对于这个特定的字符串)(Python 2.6,Python 3.1).但是Regex毕竟是专门用于字符串的,并且groupby是一个通用函数,所以这并不是那么出乎意料.


gho*_*g74 9

>>> from itertools import groupby
>>> [''.join(g) for k, g in groupby('AAAABBBCCD')]
['AAAA', 'BBB', 'CC', 'D']
Run Code Online (Sandbox Code Playgroud)

并通过正常的字符串操作

>>> a=[];S="";p=""
>>> s
'AAABBBCDEEEEBBBAA'
>>> for c in s:
...     if c != p: a.append(S);S=""
...     S=S+c
...     p=c
...
>>> a.append(S)
>>> a
['', 'AAA', 'BBB', 'C', 'D', 'EEEE', 'BBB', 'AA']
>>> filter(None,a)
['AAA', 'BBB', 'C', 'D', 'EEEE', 'BBB', 'AA']
Run Code Online (Sandbox Code Playgroud)