0

私は現在次のコードを使用しています

print "line 1     line2"
for h, m in zip(human_score, machine_score):
    print "{:5.1f}      {:5.3f}".format(h,m)

ただし、ヘッダーの「1行目」と「2行目」の間にスペースを使用するのは適切ではない場合があります。また、各行の前に可変量のスペースを追加して、下部に「mean」と「std」を合わせ、その上のリストにこれら2つの数値を合わせる方法がわかりません。

たとえば、次のように印刷したいと思います。

       Line 1      Line 2
         -6.0      7.200
         -5.0      6.377
        -10.0      14.688
         -5.0      2.580
         -8.0      8.421
         -3.0      2.876
         -6.0      9.812
         -8.0      6.218
         -8.0      15.873
          7.5      -2.805
Mean:  -0.026      7.26 
Std:    2.918      6.3

これを行うための最もPython的な方法は何ですか?

4

5 に答える 5

2

ヘッダーの使用など、より大きなフィールドサイズを使用するだけです。

print "{:>17} {:>17s}".format('line1', 'line2')

そしてあなたの番号のために:

print "{:>17.1f}      {:>12.3f}".format(h,m)

あなたのフッター:

print 
print "Mean: {:11.2f}      {:12.3f}".format(-0.026, 7.26)
print "Std : {:11.2f}      {:12.3f}".format(2.918, 6.3)

それはあなたに与えるだろう

            line1             line2
             -6.0             7.200
             -5.0             6.377
            -10.0            14.688
             -5.0             2.580
             -8.0             8.421
             -3.0             2.876
             -6.0             9.812
             -8.0             6.218
             -8.0            15.873
              7.5            -2.805

Mean:       -0.03             7.260
Std :        2.92             6.300

必要に応じてフィールド幅の値を調整できます。

于 2012-06-04T16:09:48.860 に答える
1

ヘッダーには、データの場合と同じ印刷手法を使用し、ヘッダーの単語を文字列として扱います。

于 2012-06-04T15:55:46.653 に答える
1

最初の質問は、フォーマット文字列のフィールド間に任意のスペースを入れないようにする方法についてでした。あなたはこれを避けようとするのは正しいことです。列のパディング幅をハードコーディングしないことで、さらに柔軟性が高まります。

フォーマット文字列の外部で定義されたWIDTH'constant'を使用して、両方を実行できます。次に、幅はパラメーターとしてformat関数に渡され、置換フィールド内の別の括弧のセットでフォーマット文字列に挿入されます{foo:>{width}}

列幅を変更する場合は、「定数」を変更するだけWIDTHです。

human_score = [1.23, 2.32,3.43,4.24]
machine_score = [0.23, 4.22,3.33,5.21]
WIDTH = 12
mean = "Mean:"
std = "Std:"
print '{0:>{width}}{1:>{width}}'.format('line 1', 'line 2', width=WIDTH)
for h, m in zip(human_score, machine_score):
    print "{:>{width}.1f}{:>{width}.3f}".format(h,m, width=WIDTH)

print "{mean}{:>{width1}.2f}{:>{width2}.3f}".format(-0.026, 7.26, width1=WIDTH-len(mean), width2=WIDTH, mean=mean)
print "{std}{:>{width1}.2f}{:>{width2}.3f}".format(-2.918, 6.3, width1=WIDTH-len(std), width2=WIDTH, std=std)

出力:

      line 1      line 2
         1.2       0.230
         2.3       4.220
         3.4       3.330
         4.2       5.210
Mean:  -0.03       7.260
Std:   -2.92       6.300
于 2012-06-04T19:34:40.710 に答える
0

あなたが使用することができますljustまたはrjust

いくつかの例diveintopython

于 2012-06-04T15:58:19.140 に答える
0

str.rjustとstr.ljustを使用して、これをスコアの数字と関連付けます。

于 2015-05-09T12:03:22.683 に答える