web-dev-qa-db-fra.com

Comment aligner à droite les données numériques?

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]))
35
samoz

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))
34
ChristopheD

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 ().

76
Colin Valliant

Utilisez python formatage de chaîne: '%widths' où largeur est un entier

>>> '%10s' % 10
'        10'
>>> '%10s' % 100000
'    100000'
25
Nadia Alramli

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.

4

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
2
Jochen Ritzel