2013-08-01 20 views
14

Vì vậy, tôi biết rằng "%02d to %02d"%(i, j) bằng Python sẽ không có phím số ij. Tuy nhiên, tôi đã tự hỏi nếu có bất kỳ cách nào để tự động không pad trong một chuỗi định dạng (tôi có một danh sách các số và tôi muốn kích thước pad bằng không để bằng số dài nhất trong danh sách đó).Tự động tính không đệm trong chuỗi định dạng trong python

Tôi biết rằng tôi có thể sử dụng zfill, nhưng tôi đã hy vọng tôi có thể làm toàn bộ điều trong chuỗi định dạng.

Trả lời

25

Sử dụng phương pháp str.format() của chuỗi định dạng thay vì:

'{number:0{width}d}'.format(width=2, number=4) 

Demo:

>>> '{number:0{width}d}'.format(width=2, number=4) 
'04' 
>>> '{number:0{width}d}'.format(width=8, number=4) 
'00000004' 

Các str.format() formatting specification cho phép nhiều đèo, nơi lĩnh vực thay thế có thể điền vào các thông số để định dạng kỹ thuật.

Trong ví dụ trên, các đặc điểm kỹ thuật đệm rộng mã hóa cứng sẽ trông như thế:

'{:02d}'.format(4) 

hoặc

'{number:02d}'.format(number=4) 

với một tham số được đặt tên. Tôi vừa thay thế chỉ số chiều rộng 2 bằng một trường thay thế khác.

Để có được tác dụng tương tự với kiểu cũ % chuỗi định dạng bạn cần phải sử dụng * nhân vật width:

'%0*d' % (width, number) 

nhưng điều này chỉ có thể được sử dụng với một tuple của giá trị (định dạng từ điển không phải là được hỗ trợ) và chỉ áp dụng cho chiều rộng trường; các tham số khác trong định dạng không hỗ trợ các tham số động.

+0

vĩ đại giải thích. Kiểu được đề xuất để định dạng là định dạng mới, với {}? –

+1

Có, định dạng mới linh hoạt hơn rất nhiều. –

4

Vâng, nó có thể

>>> print "%0*d" % (5, 4) 
00004 
>>> print "%0*d" % (10, 4) 
0000000004 
Các vấn đề liên quan