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
Ashchristopher
quelle

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}")
Jack M.
quelle
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
Datageek
quelle
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 .

Ber
quelle
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
Kresimir
quelle
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)

ajd
quelle
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.

Dimitris Fasarakis Hilliard
quelle
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.

nosklo
quelle
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
Zulu
quelle
33

Oder eine andere Lösung.

"{:0>2}".format(number)
WinterChilly
quelle
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
>>> 
Roberto
quelle
Widerspricht dies nicht Datageeks Antwort ?
Peter Mortensen
1
width = 5
num = 3
formatted = (width - len(str(num))) * "0" + str(num)
print formatted
nvd
quelle
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
Nicolas Gervais
quelle
0

Verwenden:

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

Oder mit dem mathModul:

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

Wenn es sich um ein- oder zweistellige Zahlen handelt:

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

Knowbody
quelle