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

二进制字符串按四位分组(剩余短组居左)的优雅实现方案

首先不建议使用bin作为变量名,会覆盖Python内置的bin()函数,可能引发未知错误,以下是两种更优雅的实现方案:

方案1:基于偏移量的简洁实现

沿用你第一种实现的逻辑,简化了边界判断和循环写法:

bin_str = "11011"
remainder = len(bin_str) % 4
split_result = []
# 先取左侧不足四位的短组
if remainder != 0:
    split_result.append(bin_str[:remainder])
# 剩余部分按四位拆分
for i in range(remainder, len(bin_str), 4):
    split_result.append(bin_str[i:i+4])
print(' '.join(split_result))
# 输出:1 1011

如果追求更短的代码,可以合并为列表推导式写法:

bin_str = "11011"
rem = len(bin_str) % 4
res = [bin_str[:rem]] + [bin_str[rem+i:rem+i+4] for i in range(0, len(bin_str)-rem, 4)] if rem else [bin_str[i:i+4] for i in range(0, len(bin_str), 4)]
print(' '.join(res))

方案2:基于反转的无边界判断实现

不需要计算余数,也不需要额外处理边界条件,通过两次反转即可得到正确结果:

bin_str = "11011"
split_parts = [bin_str[::-1][i:i+4][::-1] for i in range(0, len(bin_str), 4)][::-1]
print(' '.join(split_parts))
# 输出:1 1011

实现逻辑:

  1. 把原字符串整体反转,此时从左到右每四位截取,等价于原字符串从右到左每四位分组
  2. 把每个截取到的片段单独反转,恢复片段本身的二进制顺序
  3. 最后把整个分组列表反转,即可得到短组在最左侧的正确拆分结果

该方案对任意长度的二进制字符串都适用,无需额外处理余数为0的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:18:00