不依赖第三方库实现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 * '_')
原代码问题说明
- 用
\t制表符对齐的问题:制表符的缩进是按系统默认制表位(通常为8个字符)对齐,当字符串长度超过单个制表位长度时,就会出现错位 - 之前用numpy数组的问题:numpy会统一数组内的元素类型,把浮点型的
0.4200转成字符串时会自动截断末尾的0变成0.42,同时固定20字符的宽度太宽,不符合紧凑排版的需求。
内容的提问来源于stack exchange,提问作者Test
相关产品推荐
相关产品推荐

