我已经有一个算法可以做到这一点,但代码是丑陋而缓慢的。我假设lib中有一个内置函数或一些函数可以提供更快更精确的结果。
我想要的是我可以给出最终位数,字符串,列表或双端队列(最后可以转换为字符串的任何内容)。
func(totalBits, binaryInStringOrListForm) -> String or List with leading zeroes
我已经得到的代码如下:
val = deque(["1", "0"])
while len(val) < 8:
val.appendleft("0")
顺便说一句,deque是一种来自集合的对象,它允许你leftappend
,其中你可以将一个项目添加到列表的开头而不必将所有内容都移动一个。
对此有旧答案,但它们都是Python 2,并且整个格式化内容发生了重大变化。
编辑:我认为这个问题与链接的问题不重复,因为我实际上是在@Martijn Pieters让我意识到的领导零之后。
编辑:好的,它似乎是那个副本。抱歉欺骗。我最后编辑:我只是注意到了一些事情。在尝试使其长达一个字节时,我不断获得像000b0110这样的值。这与我想要的00000110相反。我只是添加这个,以便如果将来有人查找这个问题,他们会找到正确的东西。所以我所做的就是使用:
忽略字符串的前两个字符val = val[2::].rjust(8, '0')
我得到了这个,因为我正在用一个二进制数转换一个数字“bin”,它返回一个字符串,该字符串在开头有一个“0b”(声明为二进制)。
答案 0 :(得分:11)
有一个内置的str.ljust()
method。它采用目标宽度和可选填充字符(默认为空格)。您可以使用它来填充'0'
个字符的字符串:
val = val.ljust(8, '0')
还有一个等效的str.rjust()
method来添加左边的填充。
但是,如果你想要前导零(而不是尾随),我会使用str.zfill()
method,因为它会带有任何-
或+
前缀考虑到了。
答案 1 :(得分:3)
您可以使用格式化语言,但这个特殊示例可能是不必要的:
>>> format('101', '<08')
'10100000'
>>> "{:<0{width}}".format('101', width=8)
'10100000'