按四分割(格式化)二进制字符串
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
【讨论】:
以上是关于按四分割(格式化)二进制字符串的主要内容,如果未能解决你的问题,请参考以下文章
python字符串(移除空白,长度,索引,分割,切片,拼接,格式化输出)