Was ist eine pythonische Methode, um eine numerische Zeichenfolge mit Nullen links aufzufüllen, dh die numerische Zeichenfolge hat eine bestimmte Länge?
python
string
zero-padding
Nicolas Gervais
quelle
quelle
python >= 2.6
sind falsch. Diese Syntax funktioniert nichtpython >= 3
. Sie könnten es in ändernpython < 3
, aber kann ich vorschlagen, stattdessen immer Klammern zu verwenden und die Kommentare ganz wegzulassen (was die empfohlene Verwendung fördert)?'{:03d} {:03d}'.format(1, 2)
Ordnet die Werte implizit der Reihe nach zu.print
Aussage, wann es eineprint
Funktion auf Python 3 sein sollte? Ich habe in den Parens bearbeitet; Da nur eines gedruckt wird, funktioniert es jetzt auf Py2 und Py3 identisch.Verwenden Sie einfach die rjust- Methode des String-Objekts.
In diesem Beispiel wird eine Zeichenfolge mit 10 Zeichen erstellt und bei Bedarf aufgefüllt.
quelle
Außerdem
zfill
können Sie die allgemeine Formatierung von Zeichenfolgen verwenden:Dokumentation zur Formatierung von Zeichenfolgen und F-Zeichenfolgen .
quelle
format
stattdessen zu verwenden , und die Leute interpretieren dies im Allgemeinen als Absicht, sie zu verwerfen.Für Python 3.6+ mit F-Strings:
Für Python 2 bis Python 3.5:
quelle
wenn Sie das Gegenteil wollen:
quelle
str(n).zfill(width)
funktioniert mitstring
s,int
s,float
s ... und ist Python 2. x und 3. x kompatibel:quelle
Für diejenigen, die hierher gekommen sind, um zu verstehen und nicht nur eine schnelle Antwort. Ich mache diese speziell für Zeitzeichenfolgen:
quelle
str.zfill
ist speziell dazu gedacht:Beachten Sie, dass es speziell dafür vorgesehen ist, numerische Zeichenfolgen wie angefordert zu behandeln und ein
+
oder-
an den Anfang der Zeichenfolge zu verschieben:Hier ist die Hilfe zu
str.zfill
:Performance
Dies ist auch die leistungsstärkste alternative Methode:
Um Äpfel am besten mit Äpfeln für die
%
Methode zu vergleichen (beachten Sie, dass sie tatsächlich langsamer ist), die sonst vorberechnet wird:Implementierung
Mit ein wenig Graben fand ich die Implementierung der
zfill
Methode inObjects/stringlib/transmogrify.h
:Lassen Sie uns diesen C-Code durchgehen.
Zuerst wird das Argument positionell analysiert, was bedeutet, dass keine Schlüsselwortargumente zulässig sind:
Anschließend wird geprüft, ob die Länge gleich oder länger ist. In diesem Fall wird die Zeichenfolge zurückgegeben.
zfill
Anrufepad
(diesepad
Funktion auch durch genannt wirdljust
,rjust
undcenter
als auch). Dies kopiert im Grunde den Inhalt in eine neue Zeichenfolge und füllt die Polsterung aus.Nach dem Aufruf
pad
,zfill
bewegt sich ein ursprünglich vorhergehenden+
oder-
zum Anfang des Strings.Beachten Sie, dass die ursprüngliche Zeichenfolge nicht numerisch sein muss:
quelle
+
und berücksichtigen-
, und ich habe einen Link zu den Dokumenten hinzugefügt!In der Druckdokumentation finden Sie alle aufregenden Details!
Update für Python 3.x (7,5 Jahre später)
Diese letzte Zeile sollte jetzt sein:
Dh
print()
ist jetzt eine Funktion, keine Aussage. Beachten Sie, dass ich den Old-School-printf()
Stil immer noch bevorzuge, weil er, IMNSHO, besser liest und weil ich diese Notation seit Januar 1980 verwende. Etwas ... alte Hunde ... etwas etwas ... neue Tricks.quelle
"%0*d" % (width, x)
Python interpretiert wird?Bei Verwendung von Python
>= 3.6
ist es am saubersten, F-Strings mit String-Formatierung zu verwenden :Ich würde es vorziehen, mit einem zu formatieren
int
, da nur dann das Zeichen richtig behandelt wird:quelle
Für als Ganzzahlen gespeicherte Postleitzahlen:
quelle
Schneller Timing-Vergleich:
Ich habe verschiedene Tests mit verschiedenen Wiederholungen durchgeführt. Die Unterschiede sind nicht groß, aber in allen Tests war die
zfill
Lösung am schnellsten.quelle
Ein anderer Ansatz wäre die Verwendung eines Listenverständnisses mit einer Bedingungsprüfung auf Längen. Unten ist eine Demonstration:
quelle
Es ist auch in Ordnung:
Die Ausgabe lautet also: "02:07:03"
quelle
Sie können auch "0" wiederholen, vorstellen
str(n)
und die am weitesten rechts liegende Scheibe erhalten. Schneller und schmutziger kleiner Ausdruck.quelle