2016-09-29 75 views
2

我已经有一个算法,它已经这样做了,但代码是丑陋和缓慢的。我假设在库中有一个内置或某些函数可以提供更快,更精确的结果。将前导零添加到一个字符串Python

我想要什么地方可以给出最终的位数,字符串,列表或deque(最后可以转换为字符串的任何内容)。

func(totalBits, binaryInStringOrListForm) -> String or List with leading zeroes 

我已经得到的代码如下:

val = deque(["1", "0"]) 

    while len(val) < 8: 

     val.appendleft("0") 

顺便说一句,双端队列为收藏对象的类型,可以让你leftappend其中您可以将一个项目添加到开始的名单,而不必将所有事情都转移一次。

这有些旧的答案,但它们都是Python 2,整个格式化的东西已经发生了很大的变化。

编辑:我认为这个问题不是一个链接的重复,因为我实际上在引导零后@Martijn Pieters让我意识到。

编辑:好吧,它似乎是一个副本。抱歉关于这个骗局。

最后修改我感觉:我只是注意到了一些东西。尝试使其长度为一个字节时,我不断收到像000b0110这样的值。这与我想要的00000110相反。我只是补充一点,这样如果其他人在未来查找这个问题,他们会发现正确的事情。因此,所有我所做的就是通过使用忽略字符串的前两个字符:

val = val[2::].rjust(8, '0') 

我得到这个,因为我谈到了一些与“bin”的二进制数,它返回一个字符串在开始处有“0b”(声明为二进制)。

+0

为什么不直接使用字符串连接,如果你只需要追加为零? –

+1

如果您追加*左*,您是不是添加**前导**零? –

+0

字符串是不可变的,因此Python将被迫为每个新的连接字符串创建一个新字符串。这很慢。我需要快速这个。 – Frogboxe

回答

9

有一个内置的,str.ljust() method。它需要目标宽度和一个可选的填充字符(默认为空格)。你可以用'0'字符用它垫一个字符串:

val = val.ljust(8, '0') 

还有一个相当于str.rjust() method到左边添加填充。

但是,如果你想领先零(而不是结尾),我会用str.zfill() method作为采取任何-+前缀考虑。

+0

谢谢。这就是我一直在寻找的东西。不能接受的答案,因为stackoverflow给出了一个消息说:“你可以在8分钟内接受答案” – Frogboxe

+0

哦,是的,它是我需要的零。 – Frogboxe

1

您可以使用格式化的语言,但这个特殊的例子可能是不必要的:

>>> format('101', '<08') 
'10100000' 
>>> "{:<0{width}}".format('101', width=8) 
'10100000' 
+0

不知道为什么这是downvoted,它肯定不是一个错误的或无益的答案。请注意,当你只使用'format()'函数时,你不应该使用'str.format()':'format('101','<08')'给出了和第一个选项相同的结果,而不必分析字符串模板。 –

+0

我同意。无论如何也有两种方法是很好的。我也赞成。 – Frogboxe

+0

好点,改变... – AChampion