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

如何按自定义出现次数规则对二进制列表进行配对转码?

二进制序列自定义频次转码实现方法

需求明确

给定仅包含0和1的二进制字符串,需按以下规则将连续相同元素的段转换为[元素值, 频次编码]的子列表:

  • 连续出现次数 ≤3 → 频次编码0(short)
  • 4 ≤ 连续出现次数 ≤7 → 频次编码1(medium)
  • 连续出现次数 >7 → 频次编码2(long)

示例:输入0100111100011100000000,输出[[0,0],[1,0],[0,0],[1,1],[0,0],[1,0],[0,2]]


实现思路

  1. 遍历统计连续段:逐个遍历二进制字符串,记录当前连续元素及其出现次数
  2. 匹配编码规则:每当遇到不同元素时,根据当前段的次数匹配对应的频次编码,将[元素值, 编码]存入结果
  3. 处理最后一段:遍历结束后,处理字符串末尾的最后一个连续段

Python 实现代码

def binary_transcode(binary_str):
    # 空输入直接返回空列表
    if not binary_str:
        return []
    
    result = []
    # 初始化当前字符和计数
    current_char = binary_str[0]
    count = 1
    
    # 从第二个字符开始遍历
    for char in binary_str[1:]:
        if char == current_char:
            count += 1
        else:
            # 根据计数确定编码
            if count <= 3:
                code = 0
            elif 4 <= count <= 7:
                code = 1
            else:
                code = 2
            # 加入结果列表,注意将字符转为整数
            result.append([int(current_char), code])
            # 更新当前字符和计数
            current_char = char
            count = 1
    
    # 处理最后一个连续段
    if count <= 3:
        code = 0
    elif 4 <= count <= 7:
        code = 1
    else:
        code = 2
    result.append([int(current_char), code])
    
    return result

# 测试示例输入
example_input = "0100111100011100000000"
print("示例输出:", binary_transcode(example_input))
# 输出:[[0, 0], [1, 0], [0, 0], [1, 1], [0, 0], [1, 0], [0, 2]]

# 处理用户提供的二进制序列
user_input = "1010100010100000000000100000100000101000000000000000100000001000010"
print("用户输入转码结果:", binary_transcode(user_input))

代码说明

  • 输入需为字符串格式(若你手里是列表,可先通过''.join(list)转为字符串)
  • 每段连续元素处理完成后,都会将[元素整数形式, 频次编码]加入结果列表
  • 边界处理:包含空输入、单元素输入、末尾段的情况都已覆盖

内容的提问来源于stack exchange,提问作者Tom_Liao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:24:44