リストを表形式データとして印刷する 質問する

リストを表形式データとして印刷する 質問する

私は Python の初心者で、印刷出力用にデータを適切にフォーマットするのに苦労しています。

2 つの見出しに使用される 1 つのリストと、テーブルの内容となるマトリックスがあります。次のようになります。

teams_list = ["Man Utd", "Man City", "T Hotspur"]
data = np.array([[1, 2, 1],
                 [0, 1, 0],
                 [2, 4, 2]])

見出し名の長さは必ずしも同じではないことに注意してください。ただし、データ エントリはすべて整数です。

ここで、これを次のような表形式で表現したいと思います。

マンチェスター・ユナイテッド マンチェスター・シティ Tホットスパー
マンチェスター・ユナイテッド 1 0 0
マンチェスター・シティ 1 1 0
Tホットスパー 0 1 2

これにはデータ構造があるはずだという予感はありますが、見つけることができません。辞書を使用して印刷をフォーマットしたり、インデント付きの for ループを試したり、文字列として印刷したりしてみました。

これを行うには非常に簡単な方法があるはずですが、経験不足のため見逃している可能性があります。

ベストアンサー1

この目的には、軽量で便利な Python パッケージがいくつかあります。

1. 表にする翻訳: 翻訳: 翻訳者: 原文: Python: 翻訳者: 原文: Python: 翻訳者: 原文:

from tabulate import tabulate
print(tabulate([['Alice', 24], ['Bob', 19]], headers=['Name', 'Age']))
Name      Age
------  -----
Alice      24
Bob        19

tabulate には、ヘッダーと表の形式を指定するための多くのオプションがあります。

print(tabulate([['Alice', 24], ['Bob', 19]], headers=['Name', 'Age'], tablefmt='orgtbl'))
| Name   |   Age |
|--------+-------|
| Alice  |    24 |
| Bob    |    19 |

2. プリティテーブル:https://pypi.python.org/pypi/PrettyTable

from prettytable import PrettyTable
t = PrettyTable(['Name', 'Age'])
t.add_row(['Alice', 24])
t.add_row(['Bob', 19])
print(t)
+-------+-----+
|  Name | Age |
+-------+-----+
| Alice |  24 |
|  Bob  |  19 |
+-------+-----+

PrettyTable には、csv、html、sql データベースからデータを読み取るオプションがあります。また、データのサブセットを選択したり、テーブルを並べ替えたり、テーブル スタイルを変更したりすることもできます。

3. テキストテーブル:https://pypi.python.org/pypi/texttable

from texttable import Texttable
t = Texttable()
t.add_rows([['Name', 'Age'], ['Alice', 24], ['Bob', 19]])
print(t.draw())
+-------+-----+
| Name  | Age |
+=======+=====+
| Alice | 24  |
+-------+-----+
| Bob   | 19  |
+-------+-----+

texttable を使用すると、水平/垂直の配置、境界線のスタイル、およびデータ型を制御できます。

4. 用語テーブル:https://github.com/nschloe/termtables

import termtables as tt

string = tt.to_string(
    [["Alice", 24], ["Bob", 19]],
    header=["Name", "Age"],
    style=tt.styles.ascii_thin_double,
    # alignment="ll",
    # padding=(0, 1),
)
print(string)
+-------+-----+
| Name  | Age |
+=======+=====+
| Alice | 24  |
+-------+-----+
| Bob   | 19  |
+-------+-----+

texttable を使用すると、水平/垂直の配置、境界線のスタイル、およびデータ型を制御できます。

その他のオプション:

  • ターミナルテーブル文字列のリストのリストから、ターミナル/コンソール アプリケーションでテーブルを簡単に描画できます。複数行の行をサポートします。
  • 嫌悪感を抱くAsciitable は、組み込みの拡張リーダー クラスを介して、さまざまな ASCII テーブル形式を読み書きできます。

おすすめ記事