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

基于条件聚合嵌套元组结果:推导式实现统计表格输出求助

解决嵌套元组的球队进球统计问题

首先我先梳理下你的需求:从给定的嵌套元组数据中,按球队统计三个指标——first(进球数<50的次数)、second(进球数≥50的次数)、totalgoals(总记录数),最终输出清晰的统计结果。

先看你的原始数据:

team = ((35, 'Team1'),(8, 'Team2'),(55, 'Team1'),(65, 'Team2'),(90, 'Team1'))

步骤1:用推导式按球队分组进球数据

第一步得先把不同球队的进球数据归类到一起,这里用字典推导式就能高效完成:

team_goals = {t: [g for g, team_name in team if team_name == t] for t in set(tn for g, tn in team)}

这段代码的逻辑是:

  • 先通过set(tn for g, tn in team)提取所有不重复的球队名称
  • 再为每个球队筛选出对应的所有进球数,存入字典的对应键值对中

运行后team_goals的结果是:

{'Team1': [35, 55, 90], 'Team2': [8, 65]}

步骤2:用推导式计算各队统计指标

有了分组好的数据,接下来就能用列表推导式生成每个队的统计结果:

stats = [
    (team_name,
     sum(1 for g in goals if g < 50),  # first:进球<50的次数
     sum(1 for g in goals if g >= 50), # second:进球≥50的次数
     len(goals)                        # totalgoals:总记录数
    ) for team_name, goals in team_goals.items()
]

这段推导式会为每个球队生成包含名称和三个统计值的元组,stats的结果是:

[('Team1', 1, 2, 3), ('Team2', 1, 1, 2)]

步骤3:输出目标格式的结果

如果想要清晰的表格格式,可以这样打印:

# 打印表头
print("first    second    totalgoals")
# 逐行打印球队统计数据
for team_name, first, second, total in stats:
    print(f"{team_name:<8} {first:<8} {second:<12} {total}")

输出效果:

first    second    totalgoals
Team1    1         2            3
Team2    1         1            2

如果想要你示例里的紧凑格式,就用这段代码:

# 紧凑格式输出
print("first second totalgoals", end=" ")
for team_name, first, second, total in stats:
    print(f"{team_name} {first} {second} {total}", end=" ")

输出效果:

first second totalgoals Team1 1 2 3 Team2 1 1 2 

为啥之前的推导式没达到理想效果?

大概率是跳过了数据分组这关键一步,直接统计会难以区分不同球队的数据。先把数据按队归类,再针对每组做统计,推导式就能清晰发挥作用啦。

内容的提问来源于stack exchange,提问作者Jorge Rebelo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:39:00