1

これを行うためのより良い方法があることを願っています。コードに直接:

print "-I- %-6s%-6s%-6s%-6s%-6s%-6s%-6s%-6s%-8s" % \
      ("A",B","C","D","E","F","G","H","% Done")
print "-I- %-6s%-6s%-6s%-6s%-6s%-6s%-6s%-6s%-8s" % \
      ("-"*5 ,"-"*5 ,"-"*5 ,"-"*5 ,"-"*5 ,"-"*5 ,"-"*5,"-"*5,"-"*8)

理想的には、次のようなことをしたいと思います。

hdrs = ["A",B","C","D","E","F","G","H","% Done"]
<print statement that uses len(hdrs[i]+2) for the column width>
<print statement that uses len(hdrs[i]+2) for the column width and len(hdrs[i]+1 for the number of dashes>

出力は次のようになります。

A     B     C
----- ----- -----

この方法は、私の現在の方法よりもはるかに拡張可能です。結合とマップを使用してさまざまなことを試しましたが、実行可能な解決策を見つけることができませんでした。どんな助けでも大歓迎です。

編集:

私はちょうどこの部分を機能させました:

print " ".join("-"*(len(x)+1) for x in hdrs)

前のコード行は、元の投稿で要求した方法でダッシュを出力しますが、よりクリーンな方法があるかどうか疑問に思っています。文字列を印刷する方法がまだわかりません。

4

4 に答える 4

5

やりたいだけで、これを演習として行っていない場合は、 を使用してprettytableください。この例は、リンクされたチュートリアルからのものです。

x = PrettyTable(["City name", "Area", "Population", "Annual Rainfall"])
x.align["City name"] = "l" # Left align city names
x.padding_width = 1 # One space between column edges and contents (default)
x.add_row(["Adelaide",1295, 1158259, 600.5])
x.add_row(["Brisbane",5905, 1857594, 1146.4])
x.add_row(["Darwin", 112, 120900, 1714.7])
x.add_row(["Hobart", 1357, 205556, 619.5])
x.add_row(["Sydney", 2058, 4336374, 1214.8])
x.add_row(["Melbourne", 1566, 3806092, 646.9])
x.add_row(["Perth", 5386, 1554769, 869.4])
print x

出力:

+-----------+------+------------+-----------------+
| City name | Area | Population | Annual Rainfall |
+-----------+------+------------+-----------------+
| Adelaide  | 1295 |  1158259   |      600.5      |
| Brisbane  | 5905 |  1857594   |      1146.4     |
| Darwin    | 112  |   120900   |      1714.7     |
| Hobart    | 1357 |   205556   |      619.5      |
| Sydney    | 2058 |  4336374   |      1214.8     |
| Melbourne | 1566 |  3806092   |      646.9      |
| Perth     | 5386 |  1554769   |      869.4      |
+-----------+------+------------+-----------------+
于 2013-03-03T16:42:45.700 に答える
3

これはどう:

hdrs = ("A","B","C","D","E","F","G","H","% Done")
fmt_string = ''.join("%%-%is" % (len(h)+2) for h in hdrs)
print(fmt_string % hdrs)
print(fmt_string % tuple("-"*(len(h)+1) for h in hdrs))

例の列サイズではなく、説明されている列サイズを使用しました。

于 2013-03-03T16:41:49.743 に答える
2

次のようにフォーマット文字列を作成できます。

format = "".join(["%-"+str(len(h)+2)+"s" for h in hdrs])

次に、それを使用してリストを印刷します。次に例を示します。

l = range(hdrs) # example data to print, the number of items is the same as hdrs
print format % tuple(l)
于 2013-03-03T16:42:05.260 に答える
1

これを試してください。ここでは、すべての列の幅を指定できます(文字列が幅より大きくならないようにしてください)

widths = [6,6,6,6,6,6,6,6,8]
hdrs = ["A","B","C","D","E","F","G","H","% Done"]

data = [hdrs[i].ljust(widths[i]) for i in range(len(hdrs))]
widths = ['-'*i for i in widths]

print '%s '*len(data) % tuple(data)
print ' '.join(widths)

出力

A      B      C      D      E      F      G      H      % Done 
------ ------ ------ ------ ------ ------ ------ ------ --------
于 2013-03-03T16:46:41.813 に答える