如何用Python分割这个字符串?

8 投票
4 回答
1946 浏览
提问于 2025-04-16 05:32

我有一些字符串,像这个例子:

"AAABBBCDEEEEBBBAA"

字符串里可以有任何字符。

我想把它分割成一个列表,像这样:

['AAA','BBB','C','D','EEEE','BBB','AA']

也就是说,把每一段连续的相同字符分到列表的不同元素里。

我知道可以逐个检查字符串里的字符,看看每对相邻的字符是否相同,但有没有更简单的方法呢?

4 个回答

3

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们没有正确理解某些概念,或者在写代码的时候犯了一些小错误。

当你在网上寻找解决方案时,像StackOverflow这样的论坛可以提供很多帮助。这里有很多经验丰富的程序员,他们会分享自己的经验和解决方案,帮助你解决问题。

如果你看到一个问题和你的情况相似,记得仔细阅读别人的回答,看看他们是怎么解决的。很多时候,答案里会有一些代码示例,帮助你更好地理解。

总之,遇到问题不要着急,慢慢查找资料,向别人请教,逐步解决你的编程难题。

import itertools
s = "AAABBBCDEEEEBBBAA"
["".join(chars) for _, chars in itertools.groupby(s)]
15

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

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

另外,我们也可以使用 itertools.groupby

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

timeit 显示在这个特定的字符串上,正则表达式的速度更快(Python 2.6, Python 3.1)。不过,正则表达式毕竟是专门用来处理字符串的,而 groupby 是一个通用的函数,所以这个结果也不算意外。

9
>>> from itertools import groupby
>>> [''.join(g) for k, g in groupby('AAAABBBCCD')]
['AAAA', 'BBB', 'CC', 'D']
>>> 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']

还有通过普通的字符串处理

撰写回答