web-dev-qa-db-ja.com

数値データを右揃えする方法は?

次の形式の3列形式で表示しているデータがあります。

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

以下に例を示します。

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

ただし、次のように、数値がすべて正しく揃っていればよいのですが。

a:   1
b:  12
c: 123

Pythonでこれを行うにはどうすればよいですか?

私が持っている既存の印刷コードは次のとおりです。

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

In Python 2.5 use rjust(strings)。また、 string formating in python単に連結する代わりに、文字列:以下のrjustおよび文字列フォーマットの簡単な例:

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

python 2.6+(および3の標準メソッド))では、文字列フォーマットの「推奨」メソッドはstring.format()を使用することです(完全なドキュメントがあります- ここ )右揃えは

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

ただし、これは5つの場所を使用します

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

も有効であり、.format()に渡された値の幅を使用します。

76
Colin Valliant

python string format:'%widths'ここで、幅は整数です

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

Python 3.6では、 Literal String Interpolation を使用できます。

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

あるいは単に:

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

str.format()構文の多くを再利用します。

これが将来的に好ましい方法になると思います。

数値の上限がわかっている場合は、"%<lenght>d" % n。これらすべての計算が行われ、(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