Python中如何将二维列表打印为对齐规整的表格?
解决Python二维列表对齐打印的问题
针对你要打印两名玩家掷骰子结果的需求,以下两种方法可以解决空格分隔导致的错位问题:
方法1:手动字符串格式化(无需额外依赖)
利用Python的字符串格式化语法,给每列元素指定固定宽度,确保行列对齐。比如设定每列占10个字符宽度,用f"{内容:<10}"实现左对齐(>是右对齐,^是居中),不管元素长度如何,每列都会保持规整。
示例代码:
import random # 模拟两名玩家各掷10次骰子的结果 dice_results = [ [random.randint(1, 6) for _ in range(10)], [random.randint(1, 6) for _ in range(10)] ] # 计算总分与平均分 player_totals = [sum(player) for player in dice_results] player_avgs = [total / 10 for total in player_totals] # 打印表头 print(f"{'玩家1':<10}{'玩家2':<10}") print("-" * 20) # 逐行打印每轮掷骰子结果 for roll1, roll2 in zip(*dice_results): print(f"{roll1:<10}{roll2:<10}") # 打印总分与平均分 print("-" * 20) print(f"总分: {player_totals[0]:<6}{player_totals[1]}") print(f"平均分: {player_avgs[0]:.1f} {player_avgs[1]:.1f}")
方法2:使用tabulate库(简洁高效)
如果不想手动处理格式,可以用第三方库tabulate,它能自动计算列宽并生成规整表格,支持多种表格样式。
首先安装库:
pip install tabulate
示例代码:
import random from tabulate import tabulate # 模拟数据与计算指标 dice_results = [ [random.randint(1, 6) for _ in range(10)], [random.randint(1, 6) for _ in range(10)] ] player_totals = [sum(p) for p in dice_results] player_avgs = [t / 10 for t in player_totals] # 整理表格数据:包含每轮结果、总分、平均分 table_rows = [] for r1, r2 in zip(*dice_results): table_rows.append([r1, r2]) table_rows.extend([ ["总分", ""], [player_totals[0], player_totals[1]], ["平均分", ""], [player_avgs[0], player_avgs[1]] ]) # 打印表格,指定表头和样式 print(tabulate(table_rows, headers=["玩家1", "玩家2"], tablefmt="grid"))
tablefmt参数可选值包括simple(无边框)、grid(带网格边框)、pipe(Markdown格式表格)等,可按需调整。
核心逻辑
两种方法的核心都是固定列宽:手动格式化是显式指定宽度,tabulate则自动计算列宽并对齐,都能解决元素长度不同导致的错位问题。
内容的提问来源于stack exchange,提问作者Isa
相关产品推荐
相关产品推荐

