如何将数字转换为二进制后按连续相同子串分组并统计各组长度?
解决连续相同二进制字符的长度分组问题
嘿,我来帮你搞定这个连续字符分组的问题!你已经成功把数字转成二进制字符串了,这一步很棒~接下来咱们就来处理连续相同子串的长度统计,这里有两种实用的方法:
方法一:手动遍历(适合理解底层逻辑)
如果想搞清楚背后的原理,手动遍历是个好方式。我们只需要跟踪当前字符和它的连续长度,遇到不同字符时就把当前长度存入结果列表,然后重置跟踪状态:
n = 49 binary_str = "{0:b}".format(n) # 得到"110001" if not binary_str: print([]) else: result = [] current_char = binary_str[0] current_length = 1 # 从第二个字符开始遍历 for char in binary_str[1:]: if char == current_char: current_length += 1 else: result.append(current_length) current_char = char current_length = 1 # 别忘记把最后一组的长度加进去 result.append(current_length) print(result) # 输出: [2, 3, 1]
方法二:用itertools.groupby(简洁高效的标准库方案)
Python的itertools模块里的groupby函数专门用来处理连续相同元素的分组,用它来实现这个需求超级简洁:
import itertools n = 49 binary_str = "{0:b}".format(n) # 遍历每个分组,取分组的长度 result = [len(list(group)) for _, group in itertools.groupby(binary_str)] print(result) # 输出: [2, 3, 1]
小解释:
itertools.groupby(binary_str)会返回一个迭代器,每个元素是(当前字符, 该字符的连续分组迭代器)。我们用_忽略掉不需要的字符本身,只把分组迭代器转成列表后取长度,用列表推导式直接生成结果列表就行,代码少还不容易出错~
两种方法都能解决你的问题,日常开发更推荐用groupby,省心又高效!
内容的提问来源于stack exchange,提问作者Rcarit
相关产品推荐
相关产品推荐

