如何用简洁高效的Python代码对01字符串按连续字符分组?正则可行吗?
分割0/1字符串为连续相同字符分组的Python实现方案
方法一:正则表达式(完全可行,简洁高效)
使用re.findall()配合匹配连续0或1的正则表达式,可快速提取所有连续相同字符的分组:
import re input_str = '00001100011111000' groups = re.findall(r'0+|1+', input_str) print(groups) # 输出: ['0000', '11', '000', '11111', '000']
正则说明:
0+:匹配1个或多个连续的'0'1+:匹配1个或多个连续的'1'|:逻辑或,匹配任意一种符合条件的子串findall()会自动遍历字符串,把所有符合条件的连续子串收集成列表,完全满足需求。
方法二:使用itertools.groupby(标准库方案,直观易读)
Python标准库的itertools.groupby专门用于连续相同元素的分组,适合不想用正则的场景:
from itertools import groupby input_str = '00001100011111000' groups = [''.join(group) for char, group in groupby(input_str)] print(groups) # 输出: ['0000', '11', '000', '11111', '000']
原理说明:groupby()会遍历字符串,将连续相同的字符归为一组,返回每组的字符标识和对应的字符迭代器;用''.join()把迭代器转换为完整的连续字符子串,最终生成分组列表。
两种方案对比
- 正则方案:代码更简洁,一行核心逻辑搞定,适合熟悉正则的开发者,处理0/1字符串效率极高。
groupby方案:无需正则知识,逻辑直观,依赖标准库,处理长字符串时性能稳定。
内容的提问来源于stack exchange,提问作者AlexMKL
相关产品推荐
相关产品推荐

