You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于列表与嵌套列表生成规范表格输出(无第三方模块)

列表生成对应表格输出的解决方案

你的代码问题在于分开两次循环打印国家和奖牌数据,导致国家名和对应的奖牌数不在同一行,自然没法对齐列。要解决这个问题,核心是同时遍历国家列表和奖牌计数列表,把每组对应的数据放在同一行输出,再通过格式化字符串保证列对齐。

修正后的代码

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))

关键思路解释

  1. 同步遍历数据:用zip(countries, counts)把两个列表的元素一一配对,每次循环能拿到一个国家和它对应的奖牌列表,确保数据对应关系正确。如果习惯用索引,也可以用for i in range(COUNTRIES),通过countries[i]和counts[i]获取对应数据。
  2. 计算奖牌总数:把每行的金、银、铜牌数相加,补充表格最后一列的Total数据,用sum(medals)可以更简洁地实现这个计算。
  3. 列对齐控制:格式化字符串里的>表示右对齐,<表示左对齐,后面的数字指定列的宽度(比如{:>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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:44:58