2011-08-31 85 views
3

我想分割一个字符串到一个列表中,由python中的字符更改分隔。我发现这非常困难,但肯定我已经完全想到了,并且错过了一个可能简单的解决方案。 实施例:如何通过重复字符查找和分割字符串?

'abgg22ffeeekkkk1zzabbb'

将成为:

[ 'A', 'B', 'G-G', '22', 'FF', 'EEE', 'KKKK', '1', 'ZZ', 'A', 'BBB']

回答

5
import itertools 
[''.join(value) for key, value in itertools.groupby(my_str)] 
+0

谢谢你,这完美地工作。由于我对python还很陌生,所以我从未想过这个方法。我正在写一个非常冗长的函数来做你在一行中所做的事情。你有没有可能解释这个方法究竟是如何工作的,或者说我指出了正确的方向?我正在查看itertools文档,但这比我能够掌握ATM要多一点。 – Zak

+0

是的,itertools中的东西很棒,而且经常介意弯曲。 :-)请参阅[itertools.groupby](http://docs.python.org/library/itertools.html#itertools.groupby)文档中的等效实现,我敢打赌,你写的内容长度相似。不同之处在于itertools真的是迭代的,所以doens不需要将整个序列加载到内存中或者保持它执行此操作。您可能想要[阅读](http://www.learningpython.com/2009/02/23/iterators-iterables-and-generators-oh-my/)以及它们为什么很好。 –

+0

非常感谢,这些链接看起来像是非常有用。 – Zak

2
>>> import re 
>>> my_str = 'abgg22ffeekkkk1zzabbb' 
>>> [m.group() for m in re.finditer(r'(.)\1*', my_str)] 
['a', 'b', 'gg', '22', 'ff', 'ee', 'kkkk', '1', 'zz', 'a', 'bbb']