如何用Python统计二进制字符串中连续重复0/1的块数?
解决二进制字符串连续重复块统计问题
没问题,我来帮你搞定这个统计连续重复0/1块数的需求!下面分两种思路给你实现方案,简单易懂还高效。
思路一:手动遍历对比
这是最直观的方法,通过逐个字符和前一个对比来计数:
def count_consecutive_blocks(binary_str): # 处理空字符串的特殊情况 if not binary_str: return 0 # 非空字符串至少有1个块 block_count = 1 # 从第二个字符开始遍历 for i in range(1, len(binary_str)): # 如果当前字符和前一个不同,说明进入新块 if binary_str[i] != binary_str[i-1]: block_count += 1 return block_count # 测试你的示例 test_input = '01000110' print(count_consecutive_blocks(test_input)) # 输出5
代码解释:
- 先判断输入是否为空,避免后续遍历出错,空字符串直接返回0
- 初始化计数器为1,因为只要字符串非空,至少存在一个连续块
- 从索引1开始遍历每个字符,和前一个字符(索引i-1)比较,一旦发现不同就给计数器加1
- 遍历完成后返回最终的块数
思路二:用itertools.groupby简化代码
Python的itertools.groupby天生就适合处理这种连续相同元素分组的场景,一行核心代码就能搞定:
from itertools import groupby def count_consecutive_blocks(binary_str): # groupby会把连续相同的字符分成组,统计组数就是块数 return len(list(groupby(binary_str))) # 测试示例 print(count_consecutive_blocks('01000110')) # 输出5
代码解释:
groupby(binary_str)会返回一个迭代器,每个迭代元素对应一组连续相同的字符- 把这个迭代器转成列表后,列表的长度就是我们要的连续块数量
- 这个方法代码更简洁,可读性也很强,适合快速实现需求
两种方法都能完美解决你的问题,你可以根据自己的习惯选择使用~
内容的提问来源于stack exchange,提问作者Anotomica
相关产品推荐
相关产品推荐

