You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将数字转换为二进制后按连续相同子串分组并统计各组长度?

解决连续相同二进制字符的长度分组问题

嘿,我来帮你搞定这个连续字符分组的问题!你已经成功把数字转成二进制字符串了,这一步很棒~接下来咱们就来处理连续相同子串的长度统计,这里有两种实用的方法:

方法一:手动遍历(适合理解底层逻辑)

如果想搞清楚背后的原理,手动遍历是个好方式。我们只需要跟踪当前字符和它的连续长度,遇到不同字符时就把当前长度存入结果列表,然后重置跟踪状态:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 22:42:39