Donné:
a = 1
b = 10
c = 100
Comment afficher un zéro non significatif pour tous les nombres de moins de deux chiffres?
Voici la sortie que j'attends:
01
10
100
Donné:
a = 1
b = 10
c = 100
Comment afficher un zéro non significatif pour tous les nombres de moins de deux chiffres?
Voici la sortie que j'attends:
01
10
100
Réponses:
Dans Python 2 (et Python 3), vous pouvez faire:
print "%02d" % (1,)
Fondamentalement, % est comme printf
ou sprintf
(voir la documentation ).
Pour Python 3. +, le même comportement peut également être obtenu avec format
:
print("{:02d}".format(1))
Pour Python 3.6+, le même comportement peut être obtenu avec des chaînes f :
print(f"{1:02d}")
x = "%02d.txt" % i
déclenche TypeError (ne peut pas concaténer les objets 'str' et 'int'), mais x = "%02d.txt" % (i,)
ne le fait pas. Intéressant. Je me demande où est documenté
%
le formateur de chaînes.
Vous pouvez utiliser str.zfill
:
print(str(1).zfill(2))
print(str(10).zfill(2))
print(str(100).zfill(2))
impressions:
01
10
100
"{1:02d}"
ne peut pas avoir de variables à la place de 2
(comme si vous créez une fonction dynamique).
Dans Python 2.6+ et 3.0+, vous utiliseriez la format()
méthode de chaîne:
for i in (1, 10, 100):
print('{num:02d}'.format(num=i))
ou en utilisant le intégré (pour un seul numéro):
print(format(i, '02d'))
Voir la documentation du PEP-3101 pour les nouvelles fonctions de formatage.
print('{:02}'.format(1))
print('{:02}'.format(10))
print('{:02}'.format(100))
impressions:
01
10
100
One zero:{0:02}, two zeros: {0:03}, ninezeros: {0:010}'.format(6)
print '{:02}'.format(1)
En Python> = 3.6 , vous pouvez le faire succinctement avec les nouvelles chaînes f qui ont été introduites en utilisant:
f'{val:02}'
qui imprime la variable avec un nom val
avec une fill
valeur de 0
et un width
de2
.
Pour votre exemple spécifique, vous pouvez le faire en boucle:
a, b, c = 1, 10, 100
for val in [a, b, c]:
print(f'{val:02}')
qui imprime:
01
10
100
Pour plus d'informations sur les chaînes f, jetez un œil au PEP 498 où elles ont été introduites.
x = [1, 10, 100]
for i in x:
print '%02d' % i
résulte en:
01
10
100
Lisez plus d'informations sur le formatage des chaînes à l'aide de% dans la documentation.
Ou une autre solution.
"{:0>2}".format(number)
"{0:0>2}".format(number)
que j'inclue le paramètre pour plus de clarté - , si quelqu'un veut nLeadingZeros, il doit noter qu'il peut également le faire:"{0:0>{1}}".format(number, nLeadingZeros + 1)
Utilisez une chaîne de format - http://docs.python.org/lib/typesseq-strings.html
Par exemple:
python -c 'print "%(num)02d" % {"num":5}'
Voici comment je le fais:
str(1).zfill(len(str(total)))
Fondamentalement, zfill prend le nombre de zéros en tête que vous souhaitez ajouter, il est donc facile de prendre le plus grand nombre, de le transformer en chaîne et d'obtenir la longueur, comme ceci:
Python 3.6.5 (par défaut, 11 mai 2018, 04:00:52) [GCC 8.1.0] sur linux Tapez "aide", "copyright", "crédits" ou "licence" pour plus d'informations. >>> total = 100 >>> print (str (1) .zfill (len (str (total)))) 001 >>> total = 1000 >>> print (str (1) .zfill (len (str (total)))) 0001 >>> total = 10000 >>> print (str (1) .zfill (len (str (total)))) 00001 >>>
Vous pouvez le faire avec des chaînes f .
import numpy as np
print(f'{np.random.choice([1, 124, 13566]):0>8}')
Cela imprimera une longueur constante de 8 et remplira le reste avec l'interlignage 0
.
00000001
00000124
00013566
df['Col1']=df['Col1'].apply(lambda x: '{0:0>5}'.format(x))
Le 5 est le nombre total de chiffres.
J'ai utilisé ce lien: http://www.datasciencemadesimple.com/add-leading-preceding-zeros-python/