2013-08-01 10 views
14

So weiß ich, dass "%02d to %02d"%(i, j) in Python Pad i und j Null wird.Dynamisch berechnete Zero Padding in Formatzeichenfolge in Python

Aber ich frage mich, ob es eine Möglichkeit gibt, Pad in einer Formatzeichenfolge dynamisch zu zerlegen (ich habe eine Liste von Zahlen und ich möchte, dass die Padgröße gleich der längsten Nummer in dieser Liste ist).

Ich weiß, dass ich zfill verwenden konnte, aber ich hatte gehofft, ich könnte das ganze Ding in einer Formatzeichenkette tun.

Antwort

25

die str.format() Methode der Zeichenfolge verwenden stattdessen Formatierung:

'{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' 

Die str.format() formatting specification für mehrere Durchgänge ermöglicht, wobei Ersatzfelder in Parameter für die Formatierung von Daten füllen.

In dem obigen Beispiel ist die Polsterung Breitenangabe hartcodierte würde wie folgt aussehen:

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

oder

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

mit einem benannten Parameter. Ich habe einfach den Breitenbezeichner durch ein anderes Ersatzfeld ersetzt.

Um den gleichen Effekt mit altem Stil % Zeichenfolge erhalten Formatierung Sie die * Breite Zeichen verwenden bräuchten:

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

aber dies kann nur mit einem Tupel von Werten (Wörterbuch Formatierung verwendet werden soll, nicht unterstützt) und gilt nur für die Feldbreite; Andere Parameter in der Formatierung unterstützen keine dynamischen Parameter.

+0

Große Erklärung. Der empfohlene Formatierungsstil ist neu, mit {}? –

+1

Ja, das neue Format ist viel flexibler. –

4

Ja, es ist möglich

>>> print "%0*d" % (5, 4) 
00004 
>>> print "%0*d" % (10, 4) 
0000000004 
Verwandte Themen