我想分割一个字符串,如:
'aaabbccccabbb'
到
['aaa', 'bb', 'cccc', 'a', 'bbb']
在Python中执行此操作的优雅方法是什么?如果它更容易,可以假设字符串只包含a,b和c。
答案 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']