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

Python二维列表表格数据动态格式化打印技术求助

解决动态列宽、混合对齐的表格打印问题

你已经算出每列最大宽度的思路是对的,接下来只需要针对每列确定对齐方式,再用格式化字符串统一处理每行数据即可,以下是具体实现步骤:

1. 简化列宽计算(可选)

你当前的列宽计算可以简化为一行代码,效果完全一致:

width = [max(len(str(col)) for col in column) for column in zip(*table)]

2. 确定每列的对齐方式

遍历每一列,判断该列数据(除表头外)是否为数字类型(int/float),数字列用右对齐,字符串列用左对齐:

# 生成对齐规则:True=右对齐(数字列),False=左对齐(字符串列)
alignments = []
for col_idx in range(len(table[0])):
    # 检查该列所有数据行的元素是否为数字
    is_numeric = all(isinstance(row[col_idx], (int, float)) for row in table[1:])
    alignments.append(is_numeric)

3. 构建格式化模板

根据列宽和对齐规则,生成每行的格式化字符串:

# 生成每列的格式片段
format_parts = []
for w, align_right in zip(width, alignments):
    if align_right:
        format_parts.append(f'{{:>{w}}}')  # 右对齐格式
    else:
        format_parts.append(f'{{:<{w}}}')  # 左对齐格式
# 拼接成完整的行格式化字符串,列之间用空格分隔
row_format = ' '.join(format_parts)

4. 打印完整表格

依次打印表头、分隔线和数据行:

# 打印表头
print(row_format.format(*table[0]))
# 打印分隔线
print(row_format.format(*['-' * w for w in width]))
# 打印数据行
for row in table[1:]:
    print(row_format.format(*row))

测试示例A

把示例A的table代入上述代码,输出结果和你给出的完全一致:

Name      Marks    Division  ID
----      -----    --------  --
Raj           7    A         21
Shivam        9    A         52
Shreeya       8    C         27
Kartik        5    B         38

适配列数不固定的情况

上述代码完全不需要指定列数,会自动根据输入的二维列表的列数动态调整,不管是3列还是10列都能正常工作。


内容的提问来源于stack exchange,提问作者Susanta Dutta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:25:52