漂亮的打印列表,ASCII表中没有模块



实际上我想打印一个列表列表,比如:

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、tabulate等模块。
我根本不想使用模块。我在这里所做的看起来不错,但我想对任何列表长度都这样做,因为这里我已经给出了我想要的确切值,但如果我对另一个列表应用相同的代码,它将不适合。如果有人知道怎么做,那对我帮助很大。

您可以使用此示例来漂亮地打印表格:

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

最新更新