如何使用tabulate实现多表格横向并排展示
如何使用tabulate实现多表格横向并排展示
哈哈,我完全懂你想要的那种横向并排的表格效果!之前用tabulate做报表的时候也纠结过这个问题,刚好可以给你分享个实用的小方法~
你的需求很明确——就是要把多个tabulate生成的表格像积木一样横向拼在一起,而不是默认的上下堆叠。核心思路其实很简单:tabulate生成的每个表格本质是字符串,我们可以把每个表格拆成单独的行,然后把三个表格的对应行拼接起来,最后再整体打印。
直接上代码示例,就用你宝可梦卡牌的场景来模拟:
首先导入tabulate:
from tabulate import tabulate
准备三个不同类型的宝可梦表格数据:
# 火属性宝可梦表格 fire_cards = [ ["卡牌名称", "HP值", "攻击力"], ["喷火龙EX", 180, 120], ["火焰鸡GX", 210, 130] ] # 水属性宝可梦表格 water_cards = [ ["卡牌名称", "HP值", "攻击力"], ["水箭龟V", 220, 110], ["暴鲤龙STAR", 280, 150] ] # 草属性宝可梦表格 grass_cards = [ ["卡牌名称", "HP值", "攻击力"], ["妙蛙花VMAX", 320, 140], ["蜥蜴王EX", 190, 125] ]
接下来生成每个表格的字符串并按行拆分:
# 用grid格式生成表格(和你示例里的格式匹配),然后拆成每行的列表 fire_table_lines = tabulate(fire_cards, tablefmt="grid").splitlines() water_table_lines = tabulate(water_cards, tablefmt="grid").splitlines() grass_table_lines = tabulate(grass_cards, tablefmt="grid").splitlines()
最后把对应行横向拼接,表格之间用空格分隔:
# 逐行拼接三个表格的对应行,每行之间留两个空格间距 combined_table = [] for line1, line2, line3 in zip(fire_table_lines, water_table_lines, grass_table_lines): combined_line = f"{line1} {line2} {line3}" combined_table.append(combined_line) # 打印最终的横向并排表格 print("\n".join(combined_table))
运行这段代码后,你就能得到类似你示例里的横向并排效果啦!
如果你的三个表格行数不一样(比如某个类型的卡牌更多),可以用itertools.zip_longest来自动补空行对齐,避免报错:
from itertools import zip_longest # 处理行数不一致的情况,用空行填充短表格的缺失部分 combined_table = [] # 取第一个表格的行宽作为空行的长度,保证对齐 empty_line = " " * len(fire_table_lines[0]) for line1, line2, line3 in zip_longest(fire_table_lines, water_table_lines, grass_table_lines, fillvalue=empty_line): combined_line = f"{line1} {line2} {line3}" combined_table.append(combined_line) print("\n".join(combined_table))
小提示:如果觉得表格之间的间距太窄或太宽,直接调整拼接时的空格数量就行(比如把" "改成" ")。
备注:内容来源于stack exchange,提问作者arggbl
相关产品推荐
相关产品推荐

