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

Python按积分、净胜球从球队字典列表选最佳球队的问题排查

问题排查:足球联赛最佳球队计算逻辑错误

问题场景

需求规则:从球队列表中返回最佳球队名称,优先比较积分(wins*3 + draws),积分相同则比较净胜球(scored - conceded)。但当前代码返回Barcelona,预期结果应为Real Madrid,需排查代码问题。

用户代码

def football_league(teams):
    best_team = max(teams, key=lambda k: k["wins"]*3 + k["draws"])
    if len(best_team)>1:
        best_team = max(teams, key=lambda k: k["scored"] - k["conceded"])
        return best_team["name"]
    else:
        return best_team["name"]

la_liga = [
    {
      "name": "Sevilha",
      "wins": 18,
      "loss": 10,
      "draws": 10,
      "scored": 60,
      "conceded": 10,
    },
    {
      "name": "Barcelona",
      "wins": 22,
      "loss": 8,
      "draws": 8,
      "scored": 88,
      "conceded": 20,
    },
    {
      "name": "Real Madrid",
      "wins": 22,
      "loss": 8,
      "draws": 8,
      "scored": 98,
      "conceded": 29,
    },
    {
      "name": "Atletico Madrid",
      "wins": 22,
      "loss": 8,
      "draws": 8,
      "scored": 90,
      "conceded": 30,
    }
]
print(football_league(la_liga))

问题分析

代码存在两个核心逻辑错误:

  • 错误判断同积分球队数量:max(teams, key=...)返回的是单个球队字典,len(best_team)计算的是该字典的键值对数量(比如Barcelona的字典有6个键,所以len=6),这个判断完全无法检测是否存在多个积分相同的顶级球队。
  • 错误的净胜球比较范围:即便进入分支,代码是对所有球队取净胜球最大的,而非仅在积分最高的球队中筛选,这违反了“积分相同才比净胜球”的规则。

另外,当多个球队积分相同时,max会返回列表中第一个出现的球队(也就是Barcelona),这也是初始best_team为Barcelona的原因,但后续分支逻辑并未正确处理同积分场景。

修正方案

方案一:分步筛选(逻辑清晰)

先筛选出积分最高的球队,再在其中找净胜球最大的:

def football_league(teams):
    # 计算最高积分值
    max_points = max(team["wins"]*3 + team["draws"] for team in teams)
    # 筛选所有积分达标的球队
    top_teams = [team for team in teams if team["wins"]*3 + team["draws"] == max_points]
    # 在顶级球队中按净胜球排序
    best_team = max(top_teams, key=lambda k: k["scored"] - k["conceded"])
    return best_team["name"]

方案二:元组key一步到位(简洁高效)

利用Python元组的比较特性(先比第一个元素,再比第二个),直接用(积分, 净胜球)作为排序key:

def football_league(teams):
    best_team = max(teams, key=lambda k: (k["wins"]*3 + k["draws"], k["scored"] - k["conceded"]))
    return best_team["name"]

两种方案运行后都会返回预期的Real Madrid。

内容的提问来源于stack exchange,提问作者Manuel Carvalhinha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:35:17