在Python中以表格形式打印列表

8
我试图将几个等长的列表打印为一个表格的列。
我正在从一个 .txt 文件中读取数据,在代码结尾,我有 5 个列表,我想将它们作为分隔空格的列打印出来。

1
可能是在Python中打印表格数据的重复问题。 - Ciro Santilli OurBigBook.com
为了实现漂亮的GUI显示,你可以使用PyQt和QTableWidget。 - eric
这个回答解决了你的问题吗?将列表打印为表格数据 - Gino Mempin
5个回答

10

我会给你展示一个三元组类比:

>>> l1 = ['a', 'b', 'c']
>>> l2 = ['1', '2', '3']
>>> l3 = ['x', 'y', 'z']
>>> for row in zip(l1, l2, l3):
...     print ' '.join(row)

a 1 x
b 2 y
c 3 z

8
你可以使用我的包beautifultable。它支持按行或列添加数据,甚至可以混合两种方法。你可以插入、删除、更新任何行或列。

用法

>>> from beautifultable import BeautifulTable
>>> table = BeautifulTable()
>>> table.column_headers = ["name", "rank", "gender"]
>>> table.append_row(["Jacob", 1, "boy"])
>>> table.append_row(["Isabella", 1, "girl"])
>>> table.append_row(["Ethan", 2, "boy"])
>>> table.append_row(["Sophia", 2, "girl"])
>>> table.append_row(["Michael", 3, "boy"])
>>> print(table)
+----------+------+--------+
|   name   | rank | gender |
+----------+------+--------+
|  Jacob   |  1   |  boy   |
+----------+------+--------+
| Isabella |  1   |  girl  |
+----------+------+--------+
|  Ethan   |  2   |  boy   |
+----------+------+--------+
|  Sophia  |  2   |  girl  |
+----------+------+--------+
| Michael  |  3   |  boy   |
+----------+------+--------+

玩得开心


2

假设您有一个列表的列表:

for L in list_of_lists:
    print " ".join(L)
str.join(iterable) 函数可将一个可迭代对象中的组成部分,用给定的字符串连接起来。
因此," ".join([1, 2, 3]) 变成了 "1 2 3"。
如果我误解了问题,并且每个 list 应该是一列:
for T in zip(list1, list2, list3, list4, list5):
    print " ".join(T)

zip()函数将给定的列表合并为一个元组列表:

>>> zip([1,2,3], [4,5,6], [7,8,9])
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

干杯!


0
for nested_list in big_container_list
    print '\t'.join(nested_list)

其中\t代表制表符

快速示例:

In [1]: a = [['1','2'],['3','4']]
In [5]: for nested_list in a:
...:     print '\t'.join(nested_list)
...: 
1       2
3       4

他希望每个子列表都是一列,而不是一行。 - arshajii
没有完全理解问题,我猜。虽然我仍然不确定他的意思,但似乎只有我理解了这个 :/ - Samuele Mattiuzzo

0

试用我的

注意:这个答案已经发布在这个问题和这个问题上了。

我刚刚制作了一个库,我认为它可以真正帮助你。它非常简单,所以我认为你应该使用它。它叫做TableIT

基本用法

要使用它,首先请按照GitHub页面上的下载说明进行下载。

然后导入它:

import TableIt

然后创建一个列表的列表,其中每个内部列表都是一行:

table = [
    [4, 3, "Hi"],
    [2, 1, 808890312093],
    [5, "Hi", "Bye"]
]

然后你只需要打印它:

TableIt.printTable(table)

这是您获得的输出:

+--------------------------------------------+
| 4            | 3            | Hi           |
| 2            | 1            | 808890312093 |
| 5            | Hi           | Bye          |
+--------------------------------------------+

字段名称

如果您想要使用字段名称(如果您不使用字段名称,则无需说useFieldNames=False,因为默认设置为该值):


TableIt.printTable(table, useFieldNames=True)

从中你会得到:

+--------------------------------------------+
| 4            | 3            | Hi           |
+--------------+--------------+--------------+
| 2            | 1            | 808890312093 |
| 5            | Hi           | Bye          |
+--------------------------------------------+

还有其他用途,例如你可以这样做:

import TableIt

myList = [
    ["Name", "Email"],
    ["Richard", "richard@fakeemail.com"],
    ["Tasha", "tash@fakeemail.com"]
]

TableIt.print(myList, useFieldNames=True)

从那个:

+-----------------------------------------------+
| Name                  | Email                 |
+-----------------------+-----------------------+
| Richard               | richard@fakeemail.com |
| Tasha                 | tash@fakeemail.com    |
+-----------------------------------------------+

或者你可以这样做:

import TableIt

myList = [
    ["", "a", "b"],
    ["x", "a + x", "a + b"],
    ["z", "a + z", "z + b"]
]

TableIt.printTable(myList, useFieldNames=True)

从那里你得到:

+-----------------------+
|       | a     | b     |
+-------+-------+-------+
| x     | a + x | a + b |
| z     | a + z | z + b |
+-----------------------+

颜色

你也可以使用颜色。

通过使用颜色选项(默认设置为无)并指定RGB值来使用颜色。

使用上面的示例:

import TableIt

myList = [
    ["", "a", "b"],
    ["x", "a + x", "a + b"],
    ["z", "a + z", "z + b"]
]

TableIt.printTable(myList, useFieldNames=True, color=(26, 156, 171))

然后你会得到:

enter image description here

请注意,打印颜色可能对您无效,但它与其他打印彩色文本的库完全相同。我已经测试过每一种颜色都可以正常工作。蓝色也不会出现问题,就算使用默认的34m ANSI转义序列(如果您不知道这是什么也没关系)。总之,这一切都源于每种颜色都是RGB值而不是系统默认值。
更多信息
有关更多信息,请查看GitHub页面

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接