Python中使用制表符\t格式化打印列表出现对齐异常如何解决
问题原因
对齐异常是\t(制表符)的工作机制导致的:
- 制表符默认会将光标跳转到间隔为8个字符的下一个制表位,如果前一个字段的内容长度刚好超过了某个制表位,后续的制表符跳转位置就会和其他行不一致,自然就错位了。比如"Paypal"长度为6,打完后剩余2个字符到下一个制表位,
\t补2个空格就到下一位;而"Apple"长度为5,打完后剩余3个字符到下一个制表位,\t补3个空格,两列的起始位置就对不齐了。
解决方法
方法1:使用f-string固定列宽(推荐,原生实现无需额外依赖)
提前给每一列设定固定的输出宽度,不管内容长度多少都占对应宽度,就能保证对齐:
number = ['No.', 1 , 2 , 3 , 4 , 5 , 6] company =['Company' , 'Microsoft' , 'Amazon' , 'Paypal' , 'Apple' , 'Fastly' , 'Square'] cap = ['Cap' , 'Mega' , 'Mega' , 'Large' , 'Large' , 'Mid' , 'Mid'] qty = ['Qty', '100' , '5' , '80' , '100' , '30' , '30'] bought_price = ['Bought Price' , '188' , '1700' , '100' , '60' , '40' , '40'] market_price = ['Market Price' , '207' , '3003' , '188' , '110' , '76' , '178' ] for a,b,c,d,e,f in zip(number, company, cap,qty,bought_price, market_price ): # 每列分别设定固定宽度,<表示左对齐,后面的数字是宽度值,可以根据自己需求调整 print(f"{a:<5}{b:<15}{c:<8}{d:<8}{e:<15}{f:<15}")
输出效果:
No. Company Cap Qty Bought Price Market Price 1 Microsoft Mega 100 188 207 2 Amazon Mega 5 1700 3003 3 Paypal Large 80 100 188 4 Apple Large 100 60 110 5 Fastly Mid 30 40 76 6 Square Mid 30 40 178
方法2:使用第三方库tabulate(更省心,适合复杂表格输出)
如果经常需要输出格式化表格,可以安装tabulate库,自动计算列宽对齐,不需要手动设置宽度:
- 先安装库:
pip install tabulate - 代码示例:
from tabulate import tabulate number = ['No.', 1 , 2 , 3 , 4 , 5 , 6] company =['Company' , 'Microsoft' , 'Amazon' , 'Paypal' , 'Apple' , 'Fastly' , 'Square'] cap = ['Cap' , 'Mega' , 'Mega' , 'Large' , 'Large' , 'Mid' , 'Mid'] qty = ['Qty', '100' , '5' , '80' , '100' , '30' , '30'] bought_price = ['Bought Price' , '188' , '1700' , '100' , '60' , '40' , '40'] market_price = ['Market Price' , '207' , '3003' , '188' , '110' , '76' , '178' ] # 把所有列打包成表格数据,第一行作为表头 table = list(zip(number, company, cap, qty, bought_price, market_price)) print(tabulate(table, headers='firstrow'))
内容的提问来源于stack exchange,提问作者Chaengie1
相关产品推荐
相关产品推荐

