Dany:
a = 1
b = 10
c = 100
Jak wyświetlić zero na początku dla wszystkich liczb zawierających mniej niż dwie cyfry?
Oto wynik, którego oczekuję:
01
10
100
Dany:
a = 1
b = 10
c = 100
Jak wyświetlić zero na początku dla wszystkich liczb zawierających mniej niż dwie cyfry?
Oto wynik, którego oczekuję:
01
10
100
Odpowiedzi:
W Python 2 (i Python 3) możesz:
print "%02d" % (1,)
Zasadniczo % jest jak printf
lub sprintf
(patrz dokumenty ).
W przypadku Python 3.+ to samo zachowanie można również osiągnąć za pomocą format
:
print("{:02d}".format(1))
W Pythonie 3.6+ to samo zachowanie można osiągnąć za pomocą f-stringów :
print(f"{1:02d}")
x = "%02d.txt" % i
podnosi TypeError (nie może łączyć obiektów „str” i „int”), ale x = "%02d.txt" % (i,)
nie robi tego. Ciekawy. Zastanawiam się, gdzie to jest udokumentowane
%
formatera łańcuchowego.
Możesz użyć str.zfill
:
print(str(1).zfill(2))
print(str(10).zfill(2))
print(str(100).zfill(2))
drukuje:
01
10
100
"{1:02d}"
nie mogą mieć zmiennych w miejsce 2
(np. Jeśli tworzysz funkcję dynamiczną).
W Python 2.6+ i 3.0+ użyłbyś format()
metody łańcuchowej:
for i in (1, 10, 100):
print('{num:02d}'.format(num=i))
lub używając wbudowanego (dla jednego numeru):
print(format(i, '02d'))
Zobacz nowe funkcje formatowania w dokumentacji PEP-3101 .
print('{:02}'.format(1))
print('{:02}'.format(10))
print('{:02}'.format(100))
drukuje:
01
10
100
One zero:{0:02}, two zeros: {0:03}, ninezeros: {0:010}'.format(6)
print '{:02}'.format(1)
W Pythonie> = 3.6 możesz to zrobić zwięźle z nowymi ciągami f, które zostały wprowadzone przy użyciu:
f'{val:02}'
który drukuje zmiennej o nazwie val
o fill
wartości 0
oraz width
z 2
.
W twoim konkretnym przykładzie możesz to zrobić ładnie w pętli:
a, b, c = 1, 10, 100
for val in [a, b, c]:
print(f'{val:02}')
który drukuje:
01
10
100
Aby uzyskać więcej informacji na temat f-stringów, zobacz PEP 498, w którym zostały wprowadzone.
x = [1, 10, 100]
for i in x:
print '%02d' % i
prowadzi do:
01
10
100
Przeczytaj więcej informacji na temat formatowania łańcucha przy użyciu% w dokumentacji.
Pythoniczny sposób na zrobienie tego:
str(number).rjust(string_width, fill_char)
W ten sposób oryginalny ciąg znaków jest zwracany bez zmian, jeśli jego długość jest większa niż szerokość_łańcucha. Przykład:
a = [1, 10, 100]
for num in a:
print str(num).rjust(2, '0')
Wyniki:
01
10
100
Lub inne rozwiązanie.
"{:0>2}".format(number)
"{0:0>2}".format(number)
dodałbym parametr dla jasności - jeśli ktoś będzie chciał nLeadingZeros, powinien zauważyć, że może także:"{0:0>{1}}".format(number, nLeadingZeros + 1)
Użyj ciągu formatu - http://docs.python.org/lib/typesseq-strings.html
Na przykład:
python -c 'print "%(num)02d" % {"num":5}'
Tak to robię:
str(1).zfill(len(str(total)))
Zasadniczo Zfill przyjmuje liczbę wiodących zer, które chcesz dodać, więc łatwo jest wziąć największą liczbę, przekształcić ją w ciąg i uzyskać długość, jak poniżej:
Python 3.6.5 (domyślnie, 11 maja 2018, 04:00:52) [GCC 8.1.0] w systemie Linux Aby uzyskać więcej informacji, wpisz „pomoc”, „prawa autorskie”, „kredyty” lub „licencja”. >>> ogółem = 100 >>> print (str (1) .zfill (len (str (total)))) 001 >>> ogółem = 1000 >>> print (str (1) .zfill (len (str (total)))) 0001 >>> ogółem = 10000 >>> print (str (1) .zfill (len (str (total)))) 00001 >>>
Można to zrobić z f strun .
import numpy as np
print(f'{np.random.choice([1, 124, 13566]):0>8}')
Spowoduje to wydrukowanie stałej długości 8, a resztę będzie uzupełniać prowadzeniem 0
.
00000001
00000124
00013566
df['Col1']=df['Col1'].apply(lambda x: '{0:0>5}'.format(x))
5 oznacza liczbę cyfr całkowitych.
Użyłem tego linku: http://www.datasciencemadesimple.com/add-leading-preceding-zeros-python/