ได้รับ:
a = 1
b = 10
c = 100
ฉันจะแสดงศูนย์นำหน้าสำหรับตัวเลขทั้งหมดที่มีตัวเลขน้อยกว่าสองหลักได้อย่างไร
นี่คือผลลัพธ์ที่ฉันคาดหวัง:
01
10
100
ได้รับ:
a = 1
b = 10
c = 100
ฉันจะแสดงศูนย์นำหน้าสำหรับตัวเลขทั้งหมดที่มีตัวเลขน้อยกว่าสองหลักได้อย่างไร
นี่คือผลลัพธ์ที่ฉันคาดหวัง:
01
10
100
คำตอบ:
ใน Python 2 (และ Python 3) คุณสามารถทำได้:
print "%02d" % (1,)
โดยทั่วไปแล้ว%จะคล้ายprintf
หรือsprintf
(ดูเอกสาร )
สำหรับ Python 3 + สามารถใช้การทำงานแบบเดียวกันกับformat
:
print("{:02d}".format(1))
สำหรับ Python 3.6+ สามารถใช้พฤติกรรมเดียวกันได้ด้วยf-strings :
print(f"{1:02d}")
x = "%02d.txt" % i
ยก TypeError (ไม่สามารถเชื่อมต่อวัตถุ 'str' และ 'int') แต่x = "%02d.txt" % (i,)
ไม่ได้ น่าสนใจ ฉันสงสัยว่าเอกสารนั้นอยู่ที่ไหน
%
formater แบบสตริง
คุณสามารถใช้str.zfill
:
print(str(1).zfill(2))
print(str(10).zfill(2))
print(str(100).zfill(2))
พิมพ์:
01
10
100
"{1:02d}"
ไม่สามารถมีตัวแปรแทนที่2
(เช่นถ้าคุณกำลังสร้างฟังก์ชั่นแบบไดนามิก)
ใน Python 2.6+ และ 3.0+ คุณจะต้องใช้format()
เมธอด string:
for i in (1, 10, 100):
print('{num:02d}'.format(num=i))
หรือใช้ในตัว (สำหรับหมายเลขเดียว):
print(format(i, '02d'))
ดูเอกสารประกอบPEP-3101สำหรับฟังก์ชั่นการจัดรูปแบบใหม่
print('{:02}'.format(1))
print('{:02}'.format(10))
print('{:02}'.format(100))
พิมพ์:
01
10
100
One zero:{0:02}, two zeros: {0:03}, ninezeros: {0:010}'.format(6)
print '{:02}'.format(1)
หรือสิ่งนี้:
print '{0:02d}'.format(1)
ในPython> = 3.6คุณสามารถทำสิ่งนี้ได้อย่างชัดเจนด้วย f-strings ใหม่ที่ถูกแนะนำโดยใช้:
f'{val:02}'
ซึ่งพิมพ์ตัวแปรที่มีชื่อval
ที่มีfill
ค่าของ0
และของwidth
2
สำหรับตัวอย่างเฉพาะของคุณคุณสามารถทำได้เป็นอย่างดี:
a, b, c = 1, 10, 100
for val in [a, b, c]:
print(f'{val:02}')
ซึ่งพิมพ์:
01
10
100
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ f-strings ลองดูที่PEP 498ที่มีการนำมาใช้
x = [1, 10, 100]
for i in x:
print '%02d' % i
ผลลัพธ์ใน:
01
10
100
อ่านข้อมูลเพิ่มเติมเกี่ยวกับการจัดรูปแบบสตริงโดยใช้%ในเอกสารประกอบ
วิธี Pythonic การทำเช่นนี้:
str(number).rjust(string_width, fill_char)
วิธีนี้สตริงต้นฉบับจะถูกส่งคืนไม่เปลี่ยนแปลงถ้าความยาวมากกว่า string_width ตัวอย่าง:
a = [1, 10, 100]
for num in a:
print str(num).rjust(2, '0')
ผล:
01
10
100
หรือทางออกอื่น
"{:0>2}".format(number)
"{0:0>2}".format(number)
ถ้ามีคนต้องการ nLeadingZeros พวกเขาควรทราบว่าพวกเขาสามารถทำได้:"{0:0>{1}}".format(number, nLeadingZeros + 1)
ใช้สตริงรูปแบบ - http://docs.python.org/lib/typesseq-strings.html
ตัวอย่างเช่น:
python -c 'print "%(num)02d" % {"num":5}'
นี่คือวิธีที่ฉันทำ:
str(1).zfill(len(str(total)))
โดยพื้นฐานแล้ว zfill ใช้จำนวนศูนย์นำที่คุณต้องการเพิ่มดังนั้นจึงง่ายที่จะนำจำนวนที่ใหญ่ที่สุดเปลี่ยนเป็นสตริงและได้ความยาวดังนี้:
Python 3.6.5 (ค่าเริ่มต้น 11 พฤษภาคม 2018 04:00:52) [GCC 8.1.0] บน linux พิมพ์ "ความช่วยเหลือ", "ลิขสิทธิ์", "เครดิต" หรือ "ใบอนุญาต" สำหรับข้อมูลเพิ่มเติม >>> ทั้งหมด = 100 >>> พิมพ์ (str (1) .zfill (len (str (ทั้งหมด)))) 001 >>> ทั้งหมด = 1,000 >>> พิมพ์ (str (1) .zfill (len (str (ทั้งหมด)))) 0001 >>> ทั้งหมด = 10,000 >>> พิมพ์ (str (1) .zfill (len (str (ทั้งหมด)))) 00001 >>>
width = 5
num = 3
formatted = (width - len(str(num))) * "0" + str(num)
print formatted
คุณสามารถทำเช่นนี้กับสตริงฉ
import numpy as np
print(f'{np.random.choice([1, 124, 13566]):0>8}')
นี้จะพิมพ์ความยาวคงที่ของ 8 0
และแผ่นส่วนที่เหลือกับผู้นำ
00000001
00000124
00013566
ใช้:
'00'[len(str(i)):] + str(i)
หรือกับmath
โมดูล:
import math
'00'[math.ceil(math.log(i, 10)):] + str(i)
df['Col1']=df['Col1'].apply(lambda x: '{0:0>5}'.format(x))
5 คือจำนวนหลักทั้งหมด
ฉันใช้ลิงค์นี้: http://www.datasciencemadesimple.com/add-leading-preceding-zeros-python/
หากจัดการกับตัวเลขที่เป็นหนึ่งหรือสองหลัก:
'0'+str(number)[-2:]
หรือ '0{0}'.format(number)[-2:]