python案例统计失误次数哪队更少?

wen python案例 1

Python案例:统计失误次数哪队更少

下面用一个完整的案例来演示如何统计两队(或多个队伍)的失误次数,并找出失误更少的一方。

python案例统计失误次数哪队更少?

案例场景

假设有两支篮球队进行比赛,我们记录了每次失误(失误 = turnover)归属哪支队伍,现在要统计每队的失误次数。

# ============ 案例1:基础版 ============
# 记录每次失误属于哪支队伍
turnovers = ['A', 'A', 'B', 'A', 'B', 'B', 'A', 'B', 'B', 'A']
# 统计每队失误次数
count_a = turnovers.count('A')
count_b = turnovers.count('B')
print(f"A队失误次数: {count_a}")
print(f"B队失误次数: {count_b}")
if count_a < count_b:
    print(f"失误更少的是 A队(少 {count_b - count_a} 次)")
elif count_b < count_a:
    print(f"失误更少的是 B队(少 {count_a - count_b} 次)")
else:
    print("两队失误次数相同")

输出:

A队失误次数: 5
B队失误次数: 4
失误更少的是 B队(少 1 次)

案例2:使用字典统计(更通用)

适合队伍数量多、名字不固定的情况:

turnovers = ['湖人', '勇士', '湖人', '湖人', '勇士', '勇士', '湖人', '勇士', '勇士', '湖人']
# 统计每队失误次数
stats = {}
for team in turnovers:
    stats[team] = stats.get(team, 0) + 1
print("各队失误统计:", stats)
# 找出失误最少的队伍
min_team = min(stats, key=stats.get)
min_count = stats[min_team]
print(f"失误最少的是 {min_team},共 {min_count} 次")

输出:

各队失误统计: {'湖人': 5, '勇士': 5}
失误最少的是 湖人,共 5 次

案例3:使用 collections.Counter(推荐写法)

from collections import Counter
turnovers = ['A', 'A', 'B', 'A', 'B', 'B', 'A', 'B', 'B', 'A']
counter = Counter(turnovers)
print(counter)  # Counter({'A': 5, 'B': 4})
# 找出失误最少的队伍
min_team, min_count = counter.most_common()[-1]
print(f"失误最少:{min_team}({min_count} 次)")
# 找出所有并列最少的队伍
min_count = min(counter.values())
teams_with_min = [team for team, c in counter.items() if c == min_count]
print(f"失误最少的队伍:{teams_with_min},各 {min_count} 次")

输出:

Counter({'A': 5, 'B': 4})
失误最少:B(4 次)
失误最少的队伍:['B'],各 4 次

案例4:从 CSV 文件读取真实数据

假设 game_stats.csv 内容如下:

team,turnover
A,1
A,1
B,1
A,1
B,1
B,1
A,1
B,1
B,1
A,1

代码:

import csv
from collections import Counter
with open('game_stats.csv', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    teams = [row['team'] for row in reader if row['turnover'] == '1']
counter = Counter(teams)
print("失误统计:", counter)
min_count = min(counter.values())
winners = [t for t, c in counter.items() if c == min_count]
if len(winners) == 1:
    print(f"失误更少的队伍是:{winners[0]}({min_count} 次)")
else:
    print(f"失误并列最少:{', '.join(winners)},各 {min_count} 次")

案例5:进阶 —— 用 Pandas 处理比赛数据

import pandas as pd
data = {
    'team': ['A', 'A', 'B', 'A', 'B', 'B', 'A', 'B', 'B', 'A'],
    'turnover': [1] * 10
}
df = pd.DataFrame(data)
# 按队伍分组统计
stats = df.groupby('team')['turnover'].sum().sort_values()
print(stats)
fewest = stats.index[0]
print(f"失误更少的是 {fewest},共 {stats[fewest]} 次")

输出:

team
B    4
A    5
Name: turnover, dtype: int64
失误更少的是 B,共 4 次

方法 适用场景
list.count() 只有两队,最简单
dict / Counter 任意多队,推荐 Counter
csv 模块 从文件读数据
pandas 数据量大、需要分析

核心思路:

  1. 遍历失误记录 → 累计每队次数
  2. min()most_common()[-1] 找最小值
  3. 考虑并列情况(用列表推导式筛出所有最少的队伍)

如果你有具体的比赛数据结构(比如比分表、事件表),可以发给我,我帮你写出针对性的统计代码。

抱歉,评论功能暂时关闭!