2016-09-29 17 views
2

私は既にこれを行うアルゴリズムを持っていますが、コードは醜く遅いです。私は、高速でより正確な結果をもたらす組み込み関数またはlibsの関数があると仮定します。文字列に先行ゼロを追加するPython

最終的なビット数、文字列、リストまたは両端キュー(最後に文字列にキャスト可能なもの)をどこから与えることができますか。

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

私はすでに持っているコードは以下の通りです:

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

    while len(val) < 8: 

     val.appendleft("0") 

ところで、両端キューを使用すると、先頭に項目を追加することができますここであなたがleftappendすることができますコレクションからオブジェクトの型でありますすべてを1つずつシフトする必要はありません。

これまでの回答はありますが、すべてPython 2であり、書式設定全体が大幅に変更されました。

編集:この質問は、@Martijn Pietersが私に気付かせてくれたように、私が実際に0をリードした後にリンクされたものと重複していないと思います。

EDIT:それは見た目の複製です。嘘つきについては申し訳ありません。

最後の編集:私はただ何かに気付いた。 1バイトの長さにしようとすると、000b0110のような値が得られます。これは私が望む00000110とは対照的です。私はこれを追加して、将来他の誰かがこの質問を見ても、正しいことを見つけることができるようにしています。私はその文字列を返す「ビン」と2進数に番号を回してるので、私はこれを取得してい

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

:だから私はやったすべてが使用して、文字列の最初の2つの文字を無視しています最初は "0b"(バイナリとして宣言しています)を持っています。

+0

理由だけではなく、文字列の連結を使用していませんか? –

+1

* left *に追加している場合は、** leading **のゼロを追加していませんか? –

+0

文字列は不変であるため、Pythonは連結された新しい文字列ごとに新しい文字列を作成しなければなりません。これは遅いです。私はこれのために速く必要です。 – Frogboxe

答えて

9

str.ljust() methodが内蔵されています。ターゲットの幅とオプションの塗りつぶし文字(デフォルトはスペース)をとります。あなたは'0'文字でパッドに文字列をそれを使用することができます。

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

は左側にパディングを追加するための同等のstr.rjust() methodもあります。 (末尾ではなく)あなたが大手ゼロにしたい場合には、アカウントに任意の-+接頭辞を取るよう

しかし、私はstr.zfill() methodを使用すると思います。

+0

ありがとうございます。これは私が探していたものでした。しかし、答えを受け入れることはできません、 "8分で回答を受け入れることができます"というメッセージが表示されます。 – Frogboxe

+0

ああ、はい、私は必要なゼロを導いていました。 – Frogboxe

1

あなたはフォーマット言語を使用することができますが、この特定の例はおそらく不要である:あなたが唯一のゼロを追加する必要がある場合

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

これがなぜ落とされたのか分かりませんが、それは間違った、あるいは役に立たない答えではありません。 format( '101'、 '<08') 'は、最初のオプションと同じ結果を返します。文字列テンプレートを解析する必要はありません。 –

+0

私は同意します。どちらにしても2つの方法があるのは良いことです。私もupvotedしました。 – Frogboxe

+0

良い点、変更された... – AChampion

関連する問題