wake-up-neo.com

Wie werden numerische Daten nach rechts ausgerichtet?

Ich habe einige Daten, die ich im 3-Spalten-Format anzeige, in der Form:

key: value key: <tab> key: value <tab> key: value.

Hier ist ein Beispiel:

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

Ich würde jedoch gerne wissen, ob die Zahlen richtig ausgerichtet sind, wie zum Beispiel:

a:   1
b:  12
c: 123

Wie kann ich das in Python machen?

Hier ist der vorhandene Druckcode, den ich habe:

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

Verwenden Sie in Python 2.5 rjust (für Zeichenfolgen). Versuchen Sie auch, sich an Zeichenfolgenformatierung in python zu gewöhnen, anstatt nur zu verketten Einfaches Beispiel für die Formatierung von rechts und links:

width = 10
str_number = str(ord('a'))
print 'a%s' % (str_number.rjust(width))
34
ChristopheD

In python 2.6+ (und dies ist die Standardmethode in 3) ist die "bevorzugte" Methode für die Formatierung von Zeichenfolgen die Verwendung von string.format () (die vollständigen Dokumente, für die gefunden werden können). hier ). richtige Begründung kann mit erfolgen

"a string {0:>5}".format(foo)

hierfür werden jedoch 5 Plätze benötigt

"a string {0:>{1}}".format(foo, width)

ist ebenfalls gültig und verwendet den an .format () übergebenen Wert width.

76
Colin Valliant

Verwenden Sie python Zeichenfolgenformatierung: '%widths' wobei width eine ganze Zahl ist

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

In Python 3.6 können Sie Literal String Interpolation verwenden, was weniger ausführlich und wahrscheinlich intuitiver zu bedienen ist:

width = 5
number = 123
print (f'{number:>{width}}')

Oder nur:

number = 123
print (f'{number:>5}')

Es wird ein Großteil der str.format() -Syntax wiederverwendet.

Ich vermute/hoffe, dass dies in Zukunft der bevorzugte Weg sein wird.

Wenn Sie eine Obergrenze für Ihre Zahlen kennen, können Sie mit "%<lenght>d" % n Formatieren. Vorausgesetzt, all diese Berechnungen werden durchgeführt und in einer Liste von (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