Diberikan:
a = 1
b = 10
c = 100
Bagaimana cara menampilkan nol di depan untuk semua angka dengan kurang dari dua digit?
Ini adalah output yang saya harapkan:
01
10
100
Diberikan:
a = 1
b = 10
c = 100
Bagaimana cara menampilkan nol di depan untuk semua angka dengan kurang dari dua digit?
Ini adalah output yang saya harapkan:
01
10
100
Jawaban:
Dengan Python 2 (dan Python 3) Anda dapat melakukan:
print "%02d" % (1,)
Pada dasarnya % seperti printf
atau sprintf
(lihat dokumen ).
Untuk Python 3. +, perilaku yang sama juga dapat dicapai dengan format
:
print("{:02d}".format(1))
Untuk Python 3.6+ perilaku yang sama dapat dicapai dengan f-string :
print(f"{1:02d}")
x = "%02d.txt" % i
memunculkan TypeError (tidak dapat menggabungkan objek 'str' dan 'int'), tetapi x = "%02d.txt" % (i,)
tidak. Menarik. Saya ingin tahu di mana itu didokumentasikan
%
string formater.
Anda bisa menggunakan str.zfill
:
print(str(1).zfill(2))
print(str(10).zfill(2))
print(str(100).zfill(2))
cetakan:
01
10
100
"{1:02d}"
tidak dapat memiliki variabel di tempat 2
(seperti jika Anda membuat fungsi dinamis).
Di Python 2.6+ dan 3.0+, Anda akan menggunakan format()
metode string:
for i in (1, 10, 100):
print('{num:02d}'.format(num=i))
atau menggunakan built-in (untuk satu nomor):
print(format(i, '02d'))
Lihat dokumentasi PEP-3101 untuk fungsi pemformatan baru.
print('{:02}'.format(1))
print('{:02}'.format(10))
print('{:02}'.format(100))
cetakan:
01
10
100
One zero:{0:02}, two zeros: {0:03}, ninezeros: {0:010}'.format(6)
print '{:02}'.format(1)
Dalam Python> = 3.6 , Anda dapat melakukan ini secara ringkas dengan f-string baru yang diperkenalkan dengan menggunakan:
f'{val:02}'
yang mencetak variabel dengan nama val
dengan fill
nilai 0
dan width
dari2
.
Untuk contoh spesifik Anda, Anda dapat melakukannya dengan baik dalam satu lingkaran:
a, b, c = 1, 10, 100
for val in [a, b, c]:
print(f'{val:02}')
yang mencetak:
01
10
100
Untuk informasi lebih lanjut tentang f-string, lihat PEP 498 di mana mereka diperkenalkan.
x = [1, 10, 100]
for i in x:
print '%02d' % i
menghasilkan:
01
10
100
Baca informasi lebih lanjut tentang pemformatan string menggunakan% dalam dokumentasi.
Atau solusi lain.
"{:0>2}".format(number)
"{0:0>2}".format(number)
, jika seseorang ingin nLeadingZeros mereka harus mencatat mereka juga dapat melakukannya:"{0:0>{1}}".format(number, nLeadingZeros + 1)
Gunakan string format - http://docs.python.org/lib/typesseq-strings.html
Sebagai contoh:
python -c 'print "%(num)02d" % {"num":5}'
Beginilah cara saya melakukannya:
str(1).zfill(len(str(total)))
Pada dasarnya zfill mengambil jumlah nol terkemuka yang ingin Anda tambahkan, jadi mudah untuk mengambil angka terbesar, mengubahnya menjadi string dan mendapatkan panjangnya, seperti ini:
Python 3.6.5 (default, 11 Mei 2018, 04:00:52) [GCC 8.1.0] di linux Ketik "bantuan", "hak cipta", "kredit" atau "lisensi" untuk informasi lebih lanjut. >>> total = 100 >>> cetak (str (1) .zfill (len (str (total)))) 001 >>> total = 1000 >>> cetak (str (1) .zfill (len (str (total)))) 0001 >>> total = 10.000 >>> cetak (str (1) .zfill (len (str (total)))) 00001 >>>
Anda dapat melakukan ini dengan f string .
import numpy as np
print(f'{np.random.choice([1, 124, 13566]):0>8}')
Ini akan mencetak panjang konstan 8, dan menempelkan sisanya dengan memimpin 0
.
00000001
00000124
00013566
df['Col1']=df['Col1'].apply(lambda x: '{0:0>5}'.format(x))
Angka 5 adalah jumlah total digit.
Saya menggunakan tautan ini: http://www.datasciencemadesimple.com/add-leading-preceding-zeros-python/
Jika berhadapan dengan angka yang satu atau dua digit:
'0'+str(number)[-2:]
atau '0{0}'.format(number)[-2:]