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
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:
In Python 2 (und Python 3) können Sie Folgendes tun:
print "%02d" % (1,)
Grundsätzlich ist % wie printf
oder 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}")
x = "%02d.txt" % i
löst TypeError aus (kann 'str'- und' int'-Objekte nicht verketten), aber x = "%02d.txt" % (i,)
nicht. Interessant. Ich frage mich, wo das dokumentiert ist
%
Einfügen einer einzelnen Variablen in ein Tupel Sie bei der Verwendung des String-Formatierers auf die sichere Seite bringt.
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
"{1:02d}"
anstelle von keine Variablen vorhanden sein können 2
(z. B. wenn Sie eine dynamische Funktion erstellen).
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 .
print('{:02}'.format(1))
print('{:02}'.format(10))
print('{:02}'.format(100))
Drucke:
01
10
100
One zero:{0:02}, two zeros: {0:03}, ninezeros: {0:010}'.format(6)
print '{:02}'.format(1)
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 val
mit einem fill
Wert von 0
und einem width
von2
.
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.
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.
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
Oder eine andere Lösung.
"{:0>2}".format(number)
"{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)
Verwenden Sie eine Formatzeichenfolge - http://docs.python.org/lib/typesseq-strings.html
Zum Beispiel:
python -c 'print "%(num)02d" % {"num":5}'
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 >>>
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
df['Col1']=df['Col1'].apply(lambda x: '{0:0>5}'.format(x))
Die 5 ist die Anzahl der Gesamtziffern.
Ich habe diesen Link verwendet: http://www.datasciencemadesimple.com/add-leading-preceding-zeros-python/