将列表打印为表格数据

新手上路,请多包涵

我是 Python 的新手,现在我正在努力为打印输出很好地格式化我的数据。

我有一个用于两个标题的列表,以及一个应该是表格内容的矩阵。像这样:

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

请注意,标题名称的长度不一定相同。不过,数据条目都是整数。

现在,我想以表格格式表示它,如下所示:

             Man Utd   Man City   T Hotspur
  Man Utd         1          0           0
 Man City         1          1           0
T Hotspur         0          1           2

我有一种预感,这一定有一个数据结构,但我找不到它。我试过使用字典和格式化打印,我试过带缩进的 for 循环,我试过打印为字符串。

我确信一定有一种非常简单的方法可以做到这一点,但由于缺乏经验,我可能会错过它。

原文由 hjweide 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 401
2 个回答

一些临时代码:

 row_format ="{:>15}" * (len(teams_list) + 1)
print(row_format.format("", *teams_list))
for team, row in zip(teams_list, data):
    print(row_format.format(team, *row))

这依赖于 str.format()Format Specification Mini-Language

原文由 Sven Marnach 发布,翻译遵循 CC BY-SA 4.0 许可协议

为此,有一些轻巧且有用的 python 包:

1.制表https ://pypi.python.org/pypi/tabulate

 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  |
+-------+-----+

使用文本表,您可以控制水平/垂直对齐、边框样式和数据类型。

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  |
+-------+-----+

使用文本表,您可以控制水平/垂直对齐、边框样式和数据类型。

其他选项:

  • terminaltables 从字符串列表的列表中轻松地在终端/控制台应用程序中绘制表格。支持多行行。
  • asciitable Asciitable 可以通过内置的扩展阅读器类读写各种 ASCII 表格格式。

原文由 iman 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题