You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 18:39:36