如何实现Python中两个列表的输出对齐?
解决列表内容对齐输出的问题
问题描述
现有两个列表:
la=["ngsir","raise","kajggf","kajggsdda","kajgg","kajggkjabfkafku","kajgg","asakfaflg","as","sfowih","akjfglff"] lb=["raise","kajggf","kajggkjabfkafku","cvsk","kajgg","asakfaflg","as","sfowih","akjfglff","kajggsdda","kajgg"]
使用以下代码打印时,原本期望两列内容对齐,但实际出现错位:
print("team A:\t\t\t team B:") for i in range(11): print(la[i]+"\t\t\t"+lb[i])
问题原因
用制表符\t对齐的核心问题是:制表符按固定间隔(通常为8个字符)跳转,当列表中元素长度差异较大时,部分元素会占用多个制表位,导致后续列的起始位置偏移,最终出现错位。
解决方法
通过固定列宽的方式确保每列的起始位置一致,具体实现有两种常用方式:
方式一:使用f-string格式化对齐
先计算第一列(team A)中最长字符串的长度,设置为列宽,再用左对齐格式输出每一行:
la = ["ngsir","raise","kajggf","kajggsdda","kajgg","kajggkjabfkafku","kajgg","asakfaflg","as","sfowih","akjfglff"] lb = ["raise","kajggf","kajggkjabfkafku","cvsk","kajgg","asakfaflg","as","sfowih","akjfglff","kajggsdda","kajgg"] # 计算第一列需要的最大宽度,加2留出空隙避免拥挤 max_col_width = max(len(item) for item in la) + 2 # 打印表头 print(f"{'team A':<{max_col_width}} team B:") # 遍历两个列表,逐行对齐输出 for item_a, item_b in zip(la, lb): print(f"{item_a:<{max_col_width}}{item_b}")
方式二:使用str.ljust()方法
ljust()方法会将字符串左对齐,并填充空格到指定宽度,同样能实现固定列宽的效果:
la = ["ngsir","raise","kajggf","kajggsdda","kajgg","kajggkjabfkafku","kajgg","asakfaflg","as","sfowih","akjfglff"] lb = ["raise","kajggf","kajggkjabfkafku","cvsk","kajgg","asakfaflg","as","sfowih","akjfglff","kajggsdda","kajgg"] max_col_width = max(len(item) for item in la) + 2 # 打印表头 print("team A".ljust(max_col_width) + "team B:") # 逐行输出 for item_a, item_b in zip(la, lb): print(item_a.ljust(max_col_width) + item_b)
这两种方式都会让team A的所有元素占据相同宽度,team B的元素会从统一的起始位置开始,完美实现对齐效果。
内容的提问来源于stack exchange,提问作者Shamit
相关产品推荐
相关产品推荐

