将字符串拆分为重复元素的字符串

时间:2012-02-29 19:38:52

标签: python

我想分割一个字符串,如:

'aaabbccccabbb'

['aaa', 'bb', 'cccc', 'a', 'bbb']

在Python中执行此操作的优雅方法是什么?如果它更容易,可以假设字符串只包含a,b和c。

4 个答案:

答案 0 :(得分:26)

这是 itertools.groupby用例:)

>>> from itertools import groupby
>>> s = 'aaabbccccabbb'
>>> [''.join(y) for _,y in groupby(s)]
['aaa', 'bb', 'cccc', 'a', 'bbb']

答案 1 :(得分:3)

你可以创建一个迭代器 - 只是为了让它变得简单而不可读:

def yield_same(string):
    it_str = iter(string)
    result = it_str.next()
    for next_chr in it_str:
        if next_chr != result[0]:
            yield result
            result = ""
        result += next_chr
    yield result


.. 
>>> list(yield_same("aaaaaabcbcdcdccccccdddddd"))
['aaaaaa', 'b', 'c', 'b', 'c', 'd', 'c', 'd', 'cccccc', 'dddddd']
>>> 

修改 好的,所以有itertools.groupby,它可能会做这样的事情。

答案 2 :(得分:2)

这是我使用正则表达式找到的最好方法:

print [a for a,b in re.findall(r"((\w)\2*)", s)]

答案 3 :(得分:1)

>>> import re
>>> s = 'aaabbccccabbb'
>>> [m.group() for m in re.finditer(r'(\w)(\1*)',s)]
['aaa', 'bb', 'cccc', 'a', 'bbb']