2009-09-09 12 views
33

私は3列形式で表示しているデータがあります:数値データを右揃えにする方法は?

key: value key: <tab> key: value <tab> key: valueです。私はPythonでこれを行うことができますどのように

a: 1 
b: 12 
c: 123 

:ここ

は例です:数字のようなすべての権利揃え、だったら

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 

しかし、私は好きだろうか? (文字列の)はPython 2.5の使用RJUSTで

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

答えて

33

:ここ

は、私が持っている既存の印刷コードです。また、文字列を連結するのではなく、Pythonでstring formattingに慣れさせてください。 RJUSTと文字列は以下の書式設定のための簡単な例:

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

あなたの番号のAA上限を知っていれば、あなたは"%<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 
25

使用Pythonの文字列フォーマット:幅が整数である'%widths'

Pythonで
>>> '%10s' % 10 
'  10' 
>>> '%10s' % 100000 
' 100000' 
+17

左揃えの場合は '%-10s'を使用します(左揃えの場合はGoogleの結果が最上位になるため、これを追加するだけです) – Mark

72

2.6+(そして、それはです3)の標準的な方法では、文字列フォーマットのための "好ましい"方法は、string.format()を使用することです(完全な文書はhereです)。 右寄せしかし

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

、これは5ヶ所を使用します

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

で行わも有効であり、渡された.formatする値の幅を使用することができます()。小さい

+1

右寄せ/整列のためにこの回答が投票された理由はわかりませんが、 '' {>>} ''を使用する必要があります。 '>'は右揃えを表します(文字列のデフォルトは '<'または左揃えです)。幸いにも、リンク先のドキュメントはこれを明確にしています。 (編集:気にしないで、私はちょうど答えを修正し、参考にしておきます) – Pat

+6

">"は数値の「整列」フィールドのデフォルト値であり、その数値は数字に関するものです。あなたは正しいですが、明示的にする方が良いです。 –

+1

Mea culpa。私は文字列を右揃えにしようとしていたので、この質問が見つかりました。数字だけが印刷されていることを把握するのに十分近くにOP質問を読んでいませんでした。明確化のためにありがとう。 – Pat

3

のPython 3.6で使用できるLiteral String Interpolation、 冗長で使いおそらくより直感的に:

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

それとも:

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

それはstr.format()構文の多くは再利用を。

これは将来的に望ましい方法だと思います。

+0

GitHub:[Python 3.6なしでf-stringsスタイルのリテラル文字列補間を使う](https://github.com/damnever/fmt) –

関連する問題