按四分割(格式化)二进制字符串

Posted

技术标签:

【中文标题】按四分割(格式化)二进制字符串【英文标题】:Splitting(Formatting) Binary String by Fours 【发布时间】:2021-11-05 19:19:39 【问题描述】:

假设我们有一个二进制字符串:bin = "11011" 我将如何将二进制字符串按四分之一分割:1 1011

通常按四分之二输出 1011 1 代替:

for i in range(0, len(bin),4):
    print(bin[i:i+4], end=" ")

>> 1011 1

虽然我发现这样做有点混乱,但我想知道它们是否是解决问题的更优雅的解决方案:

mod = len(bin)%4
for s1 in range(mod, len(bin)+1,4):
    s0 = s1 - 4
    if s0 < 0:
        s0 = 0
    print(bin[s0:s1], end=" ")

>> 1 1011

bin = (4-len(bin)%4) * "0" + bin
for i in range(0, len(bin),4):
    print(bin[i:i+4], end=" ")

>> 0001 1011

【问题讨论】:

【参考方案1】:

你可以使用这个方法:

>>> s = "10011"
>>> " ".join([s[::-1][i:i+4] for i in range(0, len(s), 4)])[::-1]
'1 0011'

s[::-1 反转字符串(即变为11001),列表理解将其拆分为 4 位长度的块。

其余的只是将列表转换回使用" ".join() 以空格分隔的字符串,然后再次反转字符串,使数字保持原来的顺序。

【讨论】:

【参考方案2】:

您可以计算len(str_num)%4,首先打印这些数字,然后将剩余的 str_num 除以 4 并打印这四个数字:

str_num = "110101010101000"
 
str_num[:len(str_num)%4] + ' ' + ' '.join(str_num[(len(str_num)%4+i):(len(str_num)%4+i+4)] for i in range(0,len(str_num),4))

输出:

'110 1010 1010 1000 '

【讨论】:

【参考方案3】:

这很简单。 试试这个,

bin = "10011"
bin = bin[::-1]
ans = []
for i in range(0, len(bin), 4):
    ans.append(bin[i:i+4])
print(' '.join(ans)[::-1])

测试用例:

输入:10011

输出:1 0011

输入:111101010

输出:1 1110 1010

【讨论】:

以上是关于按四分割(格式化)二进制字符串的主要内容,如果未能解决你的问题,请参考以下文章

python3 十六进制字符串进行分割并累加

进制转换及字符分割

python字符串(大小写判断查找分割拼接裁剪替换格式化)

python字符串(移除空白,长度,索引,分割,切片,拼接,格式化输出)

python之字符串的索引,切片,分割,替换,去除指定字符,拼接,格式化

用逗号分割长度未知但子字符串格式已知的 Fortran 字符串?