J'ai quelques données que j'affiche au format 3 colonnes, du formulaire:
key: value key: <tab> key: value <tab> key: value
.
Voici un exemple:
p: 1 sl: 10 afy: 4
q: 12 lg: 10 kla: 3
r: 0 kl: 10 klw: 3
s: 67 vw: 9 jes: 3
t: 16 uw: 9 skw: 3
u: 47 ug: 9 mjl: 3
v: 37 mj: 8 lza: 3
w: 119 fv: 8 fxg: 3
x: 16 fl: 8 aew: 3
Cependant, j'aimerais que les chiffres soient bien alignés, tels que:
a: 1
b: 12
c: 123
Comment puis-je faire cela en Python?
Voici le code d'impression existant que j'ai:
print(str(chr(i+ord('a'))) + ": " + str(singleArray[i]) + "\t" +
str(doubleArray[i][0]) + ": " + str(doubleArray[i][1]) + "\t" +
str(tripleArray[i][0]) + ": " + str(tripleArray[i][1]))
Dans Python 2.5 utilisez rjust (sur les chaînes). Essayez également de vous habituer à formatage des chaînes dans python au lieu de simplement concaténer) Exemple simple de formatage juste et chaîne ci-dessous:
width = 10
str_number = str(ord('a'))
print 'a%s' % (str_number.rjust(width))
Dans python 2.6+ (et c'est la méthode standard en 3), la méthode "préférée" pour le formatage des chaînes est d'utiliser string.format () (la documentation complète pour laquelle on peut trouver - ici ). une justification correcte peut être faite avec
"a string {0:>5}".format(foo)
cela utilisera 5 places, cependant
"a string {0:>{1}}".format(foo, width)
est également valide et utilisera la largeur de la valeur transmise à .format ().
Utilisez python formatage de chaîne: '%widths'
où largeur est un entier
>>> '%10s' % 10
' 10'
>>> '%10s' % 100000
' 100000'
Dans Python 3.6 vous pouvez utiliser Literal String Interpolation , qui est moins verbeux et probablement plus intuitif à utiliser:
width = 5
number = 123
print (f'{number:>{width}}')
Ou juste:
number = 123
print (f'{number:>5}')
Il réutilise une grande partie de la syntaxe str.format()
.
Je suppose/j'espère que ce sera la voie préférée à l'avenir.
Si vous connaissez une limite supérieure pour vos nombres, vous pouvez formater avec "%<lenght>d" % n
. Étant donné que tous ces calculs sont effectués et dans une liste de (char, num):
mapping = ((chr(i+ord('a')), singleArray[i]),
(doubleArray[i][0],doubleArray[i][1]),
(tripleArray[i][0],tripleArray[i][1])
)
for row in mapping:
print "%s: %3d" % row