Được:
a = 1
b = 10
c = 100
Làm cách nào để hiển thị số 0 đứng đầu cho tất cả các số có ít hơn hai chữ số?
Đây là đầu ra mà tôi mong đợi:
01
10
100
Được:
a = 1
b = 10
c = 100
Làm cách nào để hiển thị số 0 đứng đầu cho tất cả các số có ít hơn hai chữ số?
Đây là đầu ra mà tôi mong đợi:
01
10
100
Câu trả lời:
Trong Python 2 (và Python 3) bạn có thể làm:
print "%02d" % (1,)
Về cơ bản % là như printf
hoặc sprintf
(xem tài liệu ).
Đối với Python 3. +, hành vi tương tự cũng có thể đạt được với format
:
print("{:02d}".format(1))
Đối với Python 3.6+, hành vi tương tự có thể đạt được với chuỗi f :
print(f"{1:02d}")
x = "%02d.txt" % i
tăng TypeError (không thể ghép các đối tượng 'str' và 'int'), nhưng x = "%02d.txt" % (i,)
không. Hấp dẫn. Tôi tự hỏi tài liệu đó ở đâu
%
chuỗi.
Bạn có thể sử dụng str.zfill
:
print(str(1).zfill(2))
print(str(10).zfill(2))
print(str(100).zfill(2))
in:
01
10
100
"{1:02d}"
không thể có các biến thay thế 2
(như nếu bạn đang tạo một hàm động).
Trong Python 2.6+ và 3.0+, bạn sẽ sử dụng format()
phương thức chuỗi:
for i in (1, 10, 100):
print('{num:02d}'.format(num=i))
hoặc sử dụng tích hợp (cho một số duy nhất):
print(format(i, '02d'))
Xem tài liệu PEP-3101 để biết các chức năng định dạng mới.
print('{:02}'.format(1))
print('{:02}'.format(10))
print('{:02}'.format(100))
in:
01
10
100
One zero:{0:02}, two zeros: {0:03}, ninezeros: {0:010}'.format(6)
print '{:02}'.format(1)
Trong Python> = 3.6 , bạn có thể thực hiện việc này một cách cô đọng với chuỗi f mới được giới thiệu bằng cách sử dụng:
f'{val:02}'
trong đó in biến với tên val
với một fill
giá trị 0
và width
của2
.
Ví dụ cụ thể của bạn, bạn có thể làm điều này độc đáo trong một vòng lặp:
a, b, c = 1, 10, 100
for val in [a, b, c]:
print(f'{val:02}')
bản in nào:
01
10
100
Để biết thêm thông tin về chuỗi f, hãy xem PEP 498 nơi chúng được giới thiệu.
x = [1, 10, 100]
for i in x:
print '%02d' % i
kết quả trong:
01
10
100
Đọc thêm thông tin về định dạng chuỗi bằng% trong tài liệu.
Hoặc một giải pháp khác.
"{:0>2}".format(number)
"{0:0>2}".format(number)
, nếu ai đó muốn nLeadZeros họ nên lưu ý họ cũng có thể làm:"{0:0>{1}}".format(number, nLeadingZeros + 1)
Sử dụng chuỗi định dạng - http://docs.python.org/lib/typesseq-strings.html
Ví dụ:
python -c 'print "%(num)02d" % {"num":5}'
Đây là cách tôi làm điều đó:
str(1).zfill(len(str(total)))
Về cơ bản, zfill lấy số lượng số 0 hàng đầu bạn muốn thêm, vì vậy thật dễ dàng để lấy số lớn nhất, biến nó thành một chuỗi và lấy độ dài, như thế này:
Python 3.6.5 (mặc định, ngày 11 tháng 5 năm 2018, 04:00:52) [GCC 8.1.0] trên linux Nhập "trợ giúp", "bản quyền", "tín dụng" hoặc "giấy phép" để biết thêm thông tin. >>> tổng = 100 >>> in (str (1) .zfill (len (str (tổng)))) 001 >>> tổng = 1000 >>> in (str (1) .zfill (len (str (tổng)))) 0001 >>> tổng = 10000 >>> in (str (1) .zfill (len (str (tổng)))) 00001 >>>
Bạn có thể làm điều này với chuỗi f .
import numpy as np
print(f'{np.random.choice([1, 124, 13566]):0>8}')
Điều này sẽ in chiều dài không đổi 8, và phần còn lại với hàng đầu 0
.
00000001
00000124
00013566
df['Col1']=df['Col1'].apply(lambda x: '{0:0>5}'.format(x))
5 là số tổng chữ số.
Tôi đã sử dụng liên kết này: http://www.datasciencemadesimple.com/add-lead-precinating-zeros-python/
Nếu xử lý các số có một hoặc hai chữ số:
'0'+str(number)[-2:]
hoặc là '0{0}'.format(number)[-2:]