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

Python打印多列内容时如何实现字符串列对齐?

Python自定义多列文本打印对齐方案

问题场景

打印自定义格式多列文本时出现列错位,需要基于字符串长度自动为短文本补全空格,适配任意长度的字符串实现列对齐。

原有实现代码

header = ['string', 'longer string', 'str']
header1, header2, header3 = header
data = ['string', 'str', 'longest string']
data1, data2, data3 = data
len1 = len(header1)
len2 = len(header2)
len3 = len(header3)
len_1 = len(data1)
len_2 = len(data2)
len_3 = len(data3)
un = len1 + len2 + len3 + len_1 + len_2 + len_3
un_c = '_' * un
print(f"{un_c}\n|{header1} |{header2} |{header3}| \n |{data1} |{data2} |{data3}|")

实际运行输出

_____________________________________________
|string |longer string |str|
 |string |str |longest string|

期望对齐效果

_______________________________________
|string |longer string |str           |
|string |str           |longest string|

问题原因

  • 顶部分隔线长度计算逻辑错误:重复累加了表头和数据行的字符串长度,没有按列取最大单元格长度计算总宽度
  • 没有为长度不足列宽的字符串补全对应空格,导致后续列的竖线位置偏移
  • 数据行开头多写了一个空格,导致行首竖线和表头错位

可复用实现代码

核心逻辑是先逐列计算该列所有单元格的最大长度作为列宽,打印时每个单元格左对齐补空格到对应列宽即可,支持任意列数、任意长度的文本:

# 整理所有待打印行,第一行为表头,后续为数据行
rows = [
    ['string', 'longer string', 'str'],
    ['string', 'str', 'longest string']
]

# 逐列计算最大列宽
col_num = len(rows[0])
col_widths = [0] * col_num
for row in rows:
    for i, cell in enumerate(row):
        col_widths[i] = max(col_widths[i], len(cell))

# 计算顶部分隔线长度,包含边框和间隔占位
total_length = sum(col_widths) + 3 * col_num + 1
print('_' * total_length)

# 逐行打印,单元格自动补空格对齐
for row in rows:
    line_content = '|'
    for i, cell in enumerate(row):
        line_content += f"{cell.ljust(col_widths[i])} |"
    print(line_content)

运行上述代码即可得到期望的对齐输出,后续新增行、新增列只需要修改rows列表内容即可,不需要调整对齐逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:33:15