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 |
数据量大、需要分析 |
核心思路:
- 遍历失误记录 → 累计每队次数
- 用
min()或most_common()[-1]找最小值 - 考虑并列情况(用列表推导式筛出所有最少的队伍)
如果你有具体的比赛数据结构(比如比分表、事件表),可以发给我,我帮你写出针对性的统计代码。