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
相关产品推荐
相关产品推荐

