如何基于列表与嵌套列表生成规范表格输出(无第三方模块)
列表生成对应表格输出的解决方案
你的代码问题在于分开两次循环打印国家和奖牌数据,导致国家名和对应的奖牌数不在同一行,自然没法对齐列。要解决这个问题,核心是同时遍历国家列表和奖牌计数列表,把每组对应的数据放在同一行输出,再通过格式化字符串保证列对齐。
修正后的代码
MEDALS = 3 COUNTRIES = 8 # Create a list of country names. countries = [ "Canada", "Italy", "Germany", "Japan", "Kazakhstan", "China", "South Korea", "United States" ] # Create a table of medal counts. counts = [ [ 0, 3, 0 ], [ 0, 0, 1 ], [ 0, 0, 1 ], [ 1, 0, 0 ], [ 0, 0, 1 ], [ 3, 1, 1 ], [ 0, 1, 0 ], [ 1, 0, 1 ] ] # 打印表头,定义各列对齐方式和宽度 print("{:>13} {:<5} {:<7} {:<7} {:<5}".format("Country", "Gold", "Silver", "Bronze", "Total")) # 同时遍历国家和对应的奖牌数据 for country, medals in zip(countries, counts): gold, silver, bronze = medals total = gold + silver + bronze # 格式化每一行,和表头格式统一保证对齐 print("{:>13} {:<5} {:<7} {:<7} {:<5}".format(country, gold, silver, bronze, total))
关键思路解释
- 同步遍历数据:用
zip(countries, counts)把两个列表的元素一一配对,每次循环能拿到一个国家和它对应的奖牌列表,确保数据对应关系正确。如果习惯用索引,也可以用for i in range(COUNTRIES),通过countries[i]和counts[i]获取对应数据。 - 计算奖牌总数:把每行的金、银、铜牌数相加,补充表格最后一列的
Total数据,用sum(medals)可以更简洁地实现这个计算。 - 列对齐控制:格式化字符串里的
>表示右对齐,<表示左对齐,后面的数字指定列的宽度(比如{:>13}表示占13个字符宽度且右对齐)。表头和每行的格式保持一致,就能让整个表格的列整齐对齐。
替代实现(索引遍历版)
如果更习惯用索引操作,也可以这么写:
# 打印表头 print("{:>13} {:<5} {:<7} {:<7} {:<5}".format("Country", "Gold", "Silver", "Bronze", "Total")) for i in range(COUNTRIES): country = countries[i] gold, silver, bronze = counts[i] total = sum(counts[i]) print("{:>13} {:<5} {:<7} {:<7} {:<5}".format(country, gold, silver, bronze, total))
内容的提问来源于stack exchange,提问作者Jordan Faulkner
相关产品推荐
相关产品推荐

