Python中如何将字符串按连续相同字符块分割为列表
相邻同字符字符串分割实现方案
你的需求本质是对字符串中连续相同的字符做分组,不需要依赖固定分隔符,以下是两种经过验证的成熟实现,优先推荐标准库方案:
方案1:使用itertools.groupby(生产环境首选)
Python标准库的itertools.groupby原生设计就是用来处理相邻等值元素分组场景,完全匹配需求,代码最简洁,且底层为C实现,执行效率远高于纯Python手写循环:
import itertools s = "ccaaawq" result = [''.join(group) for _, group in itertools.groupby(s)] print(result) # 输出:['cc', 'aaa', 'w', 'q']
注意:使用时不要提前对字符串排序。
groupby默认仅聚合相邻的等值元素,刚好符合按相邻边界分割的要求,排序会打乱原字符顺序,返回错误结果。
方案2:手动遍历实现
如果需要自定义分组规则(比如忽略大小写、指定特殊字符归为同组等),可以直接遍历字符串手动判断字符边界,逻辑直观可控:
def split_by_adjacent_diff(s: str) -> list[str]: # 处理空字符串边界情况 if not s: return [] res = [] current_segment = [s[0]] for c in s[1:]: if c == current_segment[0]: current_segment.append(c) else: res.append(''.join(current_segment)) current_segment = [c] # 追加遍历结束后剩余的最后一段 res.append(''.join(current_segment)) return res # 功能测试 print(split_by_adjacent_diff("ccaaawq")) # 输出:['cc', 'aaa', 'w', 'q']
选型建议
- 无特殊定制需求时优先选
itertools.groupby,不需要手动编写边界判断逻辑,代码可读性高、出错概率低,性能最优 - 存在自定义分组逻辑需求时,选手动遍历方案,只需修改字符相等的判断条件即可适配各种衍生需求
内容的提问来源于stack exchange,提问作者Mateen Bagheri
相关产品推荐
相关产品推荐

