将列表打印为表格?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (95)

我对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

我有一个预感,有一个这样的数据结构,但我找不到它。我已经尝试使用字典和格式化打印,我已经尝试了与缩进循环,我已经尝试打印为字符串。

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

提问于
用户回答回答于

有一些轻量级的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

制表有许多选项来指定标题和表格格式。

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

2. PrettyTablehttps//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. texttablehttps//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可以控制水平/垂直对齐,边框样式和数据类型。

用户回答回答于

Python 2.7的一些专用代码:

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()格式化规范的语言

扫码关注云+社区

领取腾讯云代金券