2016-09-29 12 views
2

Ich habe einen Algorithmus, der das schon tut, aber der Code ist hässlich und langsam. Ich nehme an, dass es in den Bibliotheken eingebaute oder einige Funktionen gibt, die schnellere und präzisere Ergebnisse liefern.Füge führende Nullen zu einer Zeichenkette hinzu Python

Was ich will, wo ich eine endgültige Anzahl der Bits geben kann, eine Zeichenfolge, Liste oder deque (alles, was am Ende in einen String umgewandelt werden kann).

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

Der Code, den ich ist unten schon haben:

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

    while len(val) < 8: 

     val.appendleft("0") 

By the way, deque eine Art von Objekt von Sammlungen, die Sie leftappend ermöglicht, wobei Sie ein Element an den Anfang hinzufügen von der Liste, ohne alles um eins verschieben zu müssen.

Es gibt alte Antworten auf diese, aber sie sind alle Python 2 und die ganze Formatierung Sache erheblich verändert hat.

EDIT: Ich denke, dass diese Frage verknüpft kein Duplikat des einen ist, wie ich eigentlich nach führenden Nullen war als @Martijn Pieters mir bewusst gemacht hat.

EDIT: Ok, es ist ein Duplikat davon scheint es. Entschuldigung wegen des Betrogenen.

LETZTE BEARBEITUNG SCHWÄCHE: Ich habe gerade etwas bemerkt. Ich bekomme Werte wie 000b0110, wenn ich versuche, es ein Byte lang zu machen. Dies steht im Gegensatz zu 00000110, die ich wollte. Ich füge nur das hinzu, damit, wenn irgendjemand in der Zukunft diese Frage aufschaut, sie das richtige Ding finden werden. Also alles, was ich getan habe, ist es, die ersten beiden Zeichen der Zeichenfolge ignorieren, indem Sie:

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

ich diese bekommen, weil ich eine Zahl in eine binäre Zahl mit „bin“ drehen die eine Zeichenkette, hat am Anfang die "0b" (deklariert es als binär).

+0

Warum nicht einfach String-Verkettung verwenden, wenn Sie nur Nullen anhängen müssen? –

+1

Wenn Sie an den * linken * angehängt sind, fügen Sie keine ** führenden ** Nullen hinzu? –

+0

Zeichenketten sind unveränderlich und daher würde Python gezwungen sein, eine neue Zeichenkette für jede neue verkettete Zeichenkette zu erzeugen. Das ist langsam. Ich brauche schnell dafür. – Frogboxe

Antwort

9

Es gibt einen eingebauten, die str.ljust() method. Es verwendet die Zielbreite und ein optionales Füllzeichen (standardmäßig ein Leerzeichen). Sie können es zu polstern einen String mit '0' Zeichen verwenden:

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

Es gibt auch eine äquivalente str.rjust() method Polsterung auf der linken Seite hinzuzufügen.

Wenn Sie jedoch führende Nullen wollen (im Gegensatz zu Hinter Gegensatz), würde ich die str.zfill() method verwenden wie jeden - oder + Präfix berücksichtigt.

+0

Danke. Das war, was ich suchte.Kann die Antwort jedoch nicht akzeptieren, da stackoverflow eine Nachricht mit folgenden Worten sendet: "Sie können eine Antwort in 8 Minuten annehmen" – Frogboxe

+0

Oh, und ja, es waren führende Nullen, die ich brauchte. – Frogboxe

1

Sie können die Formatierungssprache verwenden, aber dieses Beispiel ist wahrscheinlich nicht notwendig:

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

Nicht sicher, warum dies abgelehnt wurde, ist es sicherlich keine falsche oder wenig hilfreiche Antwort. Beachten Sie, dass Sie 'str.format()' nicht verwenden sollten, wenn Sie einfach die Funktion 'format()' verwenden könnten: 'format ('101', '<08')' liefert dieselben Ergebnisse wie die erste Option , ohne eine String-Vorlage analysieren zu müssen. –

+0

Ich stimme zu. Es ist auch gut, zwei Methoden zu haben. Ich habe auch gestimmt. – Frogboxe

+0

Guter Punkt, geändert ... – AChampion

Verwandte Themen