Nummer mit führenden Nullen anzeigen


910

Gegeben:

a = 1
b = 10
c = 100

Wie zeige ich eine führende Null für alle Zahlen mit weniger als zwei Ziffern an?

Dies ist die Ausgabe, die ich erwarte:

01
10
100

Antworten:


1059

In Python 2 (und Python 3) können Sie Folgendes tun:

print "%02d" % (1,)

Grundsätzlich ist % wie printfoder sprintf(siehe Dokumente ).


Für Python 3. + kann dasselbe Verhalten auch erreicht werden mit format:

print("{:02d}".format(1))

Für Python 3.6+ kann dasselbe Verhalten mit F-Strings erreicht werden :

print(f"{1:02d}")

8
Beispiel: Geben Sie "% 05d"% result ['postalCode'] für eine 5-stellige Postleitzahl aus.
Nick Woodhams

2
x = "%02d.txt" % ilöst TypeError aus (kann 'str'- und' int'-Objekte nicht verketten), aber x = "%02d.txt" % (i,)nicht. Interessant. Ich frage mich, wo das dokumentiert ist
Theta

@theta In 2.7.6 erhalte ich keinen Fehler. Vielleicht war dies ein Fehler in einer bestimmten Version von Python, den sie seitdem behoben haben?
Jack M.

1
Könnte sein. In 2.7.6 gibt es keine Ausnahme, wenn der Formatwert kein Tupel ist (zumindest für dieses Beispiel). Wenn ich mir das Datum meines Kommentars anschaue, habe ich damals wohl 2.7.3 ausgeführt, und zu diesem Zeitpunkt wusste ich nicht, dass das %Einfügen einer einzelnen Variablen in ein Tupel Sie bei der Verwendung des String-Formatierers auf die sichere Seite bringt.
Theta

1
Um dies näher zu erläutern , erklären die Dokumente dies hier: "Wenn keine explizite Ausrichtung angegeben ist, ermöglicht das Voranstellen des Breitenfelds durch ein Nullzeichen ('0') das vorzeichenbewusste Null-Auffüllen für numerische Typen. Dies entspricht einem Füllzeichen von '. 0 'mit dem Ausrichtungstyp' = '. "
JHS

940

Sie können verwenden str.zfill:

print(str(1).zfill(2))
print(str(10).zfill(2))
print(str(100).zfill(2))

Drucke:

01
10
100

71
Ich mag diese Lösung, da sie nicht nur bei der Ausgabe der Nummer hilft, sondern auch, wenn Sie sie einer Variablen zuweisen müssen ... zB x = str (datetime.date.today (). Month) .zfill (2) wird zurückgegeben x als '02' für den Monat Februar.
EroSan

2
Dies sollte die richtige Antwort sein, da "{1:02d}"anstelle von keine Variablen vorhanden sein können 2(z. B. wenn Sie eine dynamische Funktion erstellen).
Joshua Varghese

363

In Python 2.6+ und 3.0+ würden Sie die format()String-Methode verwenden:

for i in (1, 10, 100):
    print('{num:02d}'.format(num=i))

oder mit dem eingebauten (für eine einzelne Nummer):

print(format(i, '02d'))

Informationen zu den neuen Formatierungsfunktionen finden Sie in der Dokumentation zu PEP-3101 .


29
Funktioniert auch in Python 2.7.5. Sie können auch das Format '{: 02d}'. (1) verwenden, wenn Sie keine benannten Argumente verwenden möchten.
Jason Martens

1
Funktioniert gut in 2.7.2 mit einem Gleitkomma "{0: 04.0f}". Format (1.1) ergibt 0001 (: 04 = mindestens 4 Zeichen, in diesem Fall führende Nullen, .0f = Gleitkomma ohne Dezimalstellen) . Ich bin mir der% -Formatierung bewusst, wollte aber eine vorhandene .format-Anweisung ändern, ohne das Ganze neu zu schreiben . Vielen Dank!
Michael Stimson

129
print('{:02}'.format(1))
print('{:02}'.format(10))
print('{:02}'.format(100))

Drucke:

01
10
100

1
Auf diese Weise können Sie das Argument innerhalb der Zeichenfolge mehrmals wiederholen:One zero:{0:02}, two zeros: {0:03}, ninezeros: {0:010}'.format(6)
srodriguex

2
Nur kompatibel mit Python 3. Wenn Sie Python 2.7 verwenden, tun print '{:02}'.format(1)
Sie

89

Oder dieses:

print '{0:02d}'.format(1)


73

In Python> = 3.6 können Sie dies kurz und bündig mit den neuen F-Strings tun, die mit folgenden Methoden eingeführt wurden:

f'{val:02}'

die druckt die Variable mit Namen valmit einem fillWert von 0und einem widthvon2 .

Für Ihr spezielles Beispiel können Sie dies in einer Schleife tun:

a, b, c = 1, 10, 100
for val in [a, b, c]:
    print(f'{val:02}')

welche druckt:

01 
10
100

Weitere Informationen zu F-Strings finden Sie in PEP 498, wo sie eingeführt wurden.


56
x = [1, 10, 100]
for i in x:
    print '%02d' % i

Ergebnisse in:

01
10
100

Lesen Sie mehr Informationen über String Formatierung% unter Verwendung von in der Dokumentation.


9
Das Dokumentationsbeispiel ist scheiße. Sie werfen Mapping mit der führenden Null-Stichprobe ein, daher ist es schwierig zu wissen, welche welche ist, es sei denn, Sie wissen bereits, wie es funktioniert. Das hat mich eigentlich hierher gebracht.
Grant

49

Der pythonische Weg, dies zu tun:

str(number).rjust(string_width, fill_char)

Auf diese Weise wird die ursprüngliche Zeichenfolge unverändert zurückgegeben, wenn ihre Länge größer als string_width ist. Beispiel:

a = [1, 10, 100]
for num in a:
    print str(num).rjust(2, '0')

Ergebnisse:

01
10
100

33

Oder eine andere Lösung.

"{:0>2}".format(number)

3
Dies wäre der Python-Weg, obwohl ich den Parameter aus Gründen der Klarheit einschließen würde - "{0:0>2}".format(number)wenn jemand nLeadingZeros möchte, sollte er beachten, dass er auch Folgendes tun kann:"{0:0>{1}}".format(number, nLeadingZeros + 1)
Jonathan Allan


4

So mache ich es:

str(1).zfill(len(str(total)))

Grundsätzlich verwendet zfill die Anzahl der führenden Nullen, die Sie hinzufügen möchten. Es ist also einfach, die größte Zahl zu nehmen, sie in eine Zeichenfolge umzuwandeln und die Länge wie folgt zu ermitteln:

Python 3.6.5 (Standard, 11. Mai 2018, 04:00:52) 
[GCC 8.1.0] unter Linux
Geben Sie "Hilfe", "Copyright", "Credits" oder "Lizenz" ein, um weitere Informationen zu erhalten.
>>> gesamt = 100
>>> print (str (1) .zfill (len (str (total))))
001
>>> gesamt = 1000
>>> print (str (1) .zfill (len (str (total))))
0001
>>> gesamt = 10000
>>> print (str (1) .zfill (len (str (total))))
00001
>>> 

Widerspricht dies nicht Datageeks Antwort ?
Peter Mortensen

1
width = 5
num = 3
formatted = (width - len(str(num))) * "0" + str(num)
print formatted

1

Sie können dies mit f-Strings tun .

import numpy as np

print(f'{np.random.choice([1, 124, 13566]):0>8}')

Dies druckt eine konstante Länge von 8 und füllt den Rest mit Blei auf 0.

00000001
00000124
00013566

0

Verwenden:

'00'[len(str(i)):] + str(i)

Oder mit dem mathModul:

import math
'00'[math.ceil(math.log(i, 10)):] + str(i)


-2

Wenn es sich um ein- oder zweistellige Zahlen handelt:

'0'+str(number)[-2:] oder '0{0}'.format(number)[-2:]

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.