Dato:
a = 1
b = 10
c = 100
Come posso visualizzare uno zero iniziale per tutti i numeri con meno di due cifre?
Questo è l'output che mi aspetto:
01
10
100
Dato:
a = 1
b = 10
c = 100
Come posso visualizzare uno zero iniziale per tutti i numeri con meno di due cifre?
Questo è l'output che mi aspetto:
01
10
100
Risposte:
In Python 2 (e Python 3) puoi fare:
print "%02d" % (1,)
Fondamentalmente % è come printf
o sprintf
(vedi documenti ).
Per Python 3. +, lo stesso comportamento può essere ottenuto anche con format
:
print("{:02d}".format(1))
Per Python 3.6+ è possibile ottenere lo stesso comportamento con le stringhe f :
print(f"{1:02d}")
x = "%02d.txt" % i
genera TypeError (impossibile concatenare gli oggetti 'str' e 'int'), ma x = "%02d.txt" % (i,)
non lo fa. Interessante. Mi chiedo dove sia documentato
%
mettesse al sicuro mentre usavo il formatore di stringhe.
Puoi usare str.zfill
:
print(str(1).zfill(2))
print(str(10).zfill(2))
print(str(100).zfill(2))
stampe:
01
10
100
"{1:02d}"
non possono avere variabili al posto di 2
(come se si stesse creando una funzione dinamica).
In Python 2.6+ e 3.0+, useresti il format()
metodo string:
for i in (1, 10, 100):
print('{num:02d}'.format(num=i))
o usando il built-in (per un singolo numero):
print(format(i, '02d'))
Vedere la documentazione PEP-3101 per le nuove funzioni di formattazione.
print('{:02}'.format(1))
print('{:02}'.format(10))
print('{:02}'.format(100))
stampe:
01
10
100
One zero:{0:02}, two zeros: {0:03}, ninezeros: {0:010}'.format(6)
print '{:02}'.format(1)
In Python> = 3.6 , puoi farlo in modo succinto con le nuove stringhe f che sono state introdotte usando:
f'{val:02}'
che stampa la variabile con nome val
con un fill
valore di 0
e un width
di2
.
Per il tuo esempio specifico puoi farlo bene in un ciclo:
a, b, c = 1, 10, 100
for val in [a, b, c]:
print(f'{val:02}')
che stampa:
01
10
100
Per ulteriori informazioni sulle f-string, dai un'occhiata a PEP 498 dove sono state introdotte.
x = [1, 10, 100]
for i in x:
print '%02d' % i
risulta in:
01
10
100
Leggi ulteriori informazioni sulla formattazione delle stringhe usando% nella documentazione.
O un'altra soluzione.
"{:0>2}".format(number)
"{0:0>2}".format(number)
, se qualcuno vuole nLeadingZeros dovrebbero notare che possono anche fare:"{0:0>{1}}".format(number, nLeadingZeros + 1)
Utilizzare una stringa di formato: http://docs.python.org/lib/typesseq-strings.html
Per esempio:
python -c 'print "%(num)02d" % {"num":5}'
Ecco come lo faccio:
str(1).zfill(len(str(total)))
Fondamentalmente zfill prende il numero di zeri iniziali che si desidera aggiungere, quindi è facile prendere il numero più grande, trasformarlo in una stringa e ottenere la lunghezza, in questo modo:
Python 3.6.5 (impostazione predefinita, 11 maggio 2018, 04:00:52) [GCC 8.1.0] su Linux Digita "aiuto", "copyright", "crediti" o "licenza" per ulteriori informazioni. >>> totale = 100 >>> print (str (1) .zfill (len (str (total)))) 001 >>> totale = 1000 >>> print (str (1) .zfill (len (str (total)))) 0001 >>> totale = 10000 >>> print (str (1) .zfill (len (str (total)))) 00001 >>>
Puoi farlo con le stringhe f .
import numpy as np
print(f'{np.random.choice([1, 124, 13566]):0>8}')
Questo stamperà una lunghezza costante di 8 e riempirà il resto con il comando 0
.
00000001
00000124
00013566
df['Col1']=df['Col1'].apply(lambda x: '{0:0>5}'.format(x))
Il 5 è il numero di cifre totali.
Ho usato questo link: http://www.datasciencemadesimple.com/add-leading-preceding-zeros-python/