ASCII表格中不带模块的预打印列表

2024-05-17 01:26:01 发布

您现在位置:Python中文网/ 问答频道 /正文

实际上,我想打印一个列表,如下所示,例如:

table = [["ESP","South","1000"],["ESP","North","1000"],["ESP","East","1000"],["ESP","West","1000"],["ESP","West","1000"]]

在这样的ASCII表格中:

+---+-----+----+
|ESP|South|1000|
+---+-----+----+
|ESP|North|1000|
+---+-----+----+
|ESP|East |1000|
+---+-----+----+
|ESP|West |1000|
+---+-----+----+
|ESP|West |1000|
+---+-----+----+

我的实际代码是:

table = [["ESP","South","1000"],["ESP","North","1000"], 
["ESP","East","1000"],["ESP","West","1000"],["ESP","West","1000"]]

for i in table:
    print("+","-"*7,"+","-"*6,"+","-"*5,"+")
    print("|",i[0]," "*(len(i[0])),"|",
    i[1]," "*(5-len(i[1])),"|",
    i[2]," "*(4-len(i[2])),"|")
print("+","-"*7,"+","-"*6,"+","-"*5,"+")

输出为:

+ ------- + ------ + ----- +
| ESP     | South  | 1000  |
+ ------- + ------ + ----- +
| ESP     | North  | 1000  |
+ ------- + ------ + ----- +
| ESP     | East   | 1000  |
+ ------- + ------ + ----- +
| ESP     | West   | 1000  |
+ ------- + ------ + ----- +
| ESP     | West   | 1000  |
+ ------- + ------ + ----- +

但我发现唯一的方法是使用诸如prettytable、pprint、tablate等模块 我根本不想使用模块。我在这里所做的看起来不错,但我想对任何列表长度都这样做,因为这里我已经输入了我想要的确切值,但是如果我对另一个列表应用相同的代码,它将不适合。 如果有人知道怎么做,那将对我有很大帮助


Tags: 模块代码in列表forlenasciitable
1条回答
网友
1楼 · 发布于 2024-05-17 01:26:01

您可以使用此示例了解如何打印表格:

table = [
    ["ESP", "South", "1000"],
    ["ESP", "North", "1000"],
    ["ESP", "East", "1000"],
    ["ESP", "West", "1000"],
    ["ESP", "West", "1000"],
]


def pretty_print(table, ch1="-", ch2="|", ch3="+"):
    if len(table) == 0:
        return

    max_lengths = [
        max(column)
        for column in zip(*[[len(cell) for cell in row] for row in table])
    ]

    for row in table:
        print(ch3.join(["", *[ch1 * l for l in max_lengths], ""]))
        print(
            ch2.join(
                [
                    "",
                    *[
                        ("{:<" + str(l) + "}").format(c)
                        for l, c in zip(max_lengths, row)
                    ],
                    "",
                ]
            )
        )
    print(ch3.join(["", *[ch1 * l for l in max_lengths], ""]))


pretty_print(table)

印刷品:

+ -+  -+  +
|ESP|South|1000|
+ -+  -+  +
|ESP|North|1000|
+ -+  -+  +
|ESP|East |1000|
+ -+  -+  +
|ESP|West |1000|
+ -+  -+  +
|ESP|West |1000|
+ -+  -+  +

您可以自定义它:

pretty_print(table, ch1="=")

+===+=====+====+
|ESP|South|1000|
+===+=====+====+
|ESP|North|1000|
+===+=====+====+
|ESP|East |1000|
+===+=====+====+
|ESP|West |1000|
+===+=====+====+
|ESP|West |1000|
+===+=====+====+

相关问题 更多 >