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

不依赖第三方库实现Python控制台打印输出列对齐美化方法咨询

解决方案

完全使用Python自带的字符串格式化实现,无需引入第三方库,核心逻辑是指定固定列宽替代不可靠的制表符\t对齐,同时单独指定浮点型保留4位小数避免精度丢失。

简单固定宽度实现

print(65 * '_')
# 格式化规则:第一列左对齐占27字符宽度,后两列左对齐占12字符宽度
row_format = "{:<27} {:<12} {:<12}"
print(row_format.format('algorithm', 'sil', 'dbs'))

results =  ['Agglomerative Clustering', 0.8665, 0.4200]
print(row_format.format(results[0], f"{results[1]:.4f}", f"{results[2]:.4f}"))
    
results = ['k-Means', 0.9865, 0.1200]
print(row_format.format(results[0], f"{results[1]:.4f}", f"{results[2]:.4f}"))

print(65 * '_')

运行后输出完全符合预期:

_________________________________________________________________
algorithm                   sil          dbs         
Agglomerative Clustering    0.8665       0.4200      
k-Means                     0.9865       0.1200      
_________________________________________________________________

自适应列宽进阶实现

如果后续需要新增更长的算法名,可自动计算每列最大宽度适配,无需手动调整格式规则:

print(65 * '_')
heading = ['algorithm', 'sil', 'dbs']
result1 =  ['Agglomerative Clustering', 0.8665, 0.4200]
result2 = ['k-Means', 0.9865, 0.1200]
# 统一预处理所有行数据,浮点型先转成保留4位小数的字符串
all_rows = [
    heading,
    [result1[0], f"{result1[1]:.4f}", f"{result1[2]:.4f}"],
    [result2[0], f"{result2[1]:.4f}", f"{result2[2]:.4f}"]
]
# 自动计算每列最大宽度,额外加4个字符作为列间距
col_widths = [max(len(str(row[i])) for row in all_rows) + 4 for i in range(len(heading))]
# 生成对应宽度的格式化规则
row_format = ''.join([f"{{:<{w}}}" for w in col_widths])
for row in all_rows:
    print(row_format.format(*row))
print(65 * '_')

原代码问题说明

  1. 用\t制表符对齐的问题:制表符的缩进是按系统默认制表位(通常为8个字符)对齐,当字符串长度超过单个制表位长度时,就会出现错位
  2. 之前用numpy数组的问题:numpy会统一数组内的元素类型,把浮点型的0.4200转成字符串时会自动截断末尾的0变成0.42,同时固定20字符的宽度太宽,不符合紧凑排版的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:06:08