篮球转身过人次数统计案例
下面是一个完整的 Python 案例,用于统计篮球运动员转身过人次数并排名,判断谁使用转身过人最多。

场景说明
假设我们有一场比赛的记录数据,每次球员完成"转身过人"动作都会记录一条数据,我们需要统计每位球员的转身过人次数,并找出最多的人。
基础版(使用列表 + 字典)
# 模拟比赛记录:每一条代表一次成功的转身过人
records = [
"库里", "詹姆斯", "库里", "欧文", "杜兰特",
"欧文", "库里", "詹姆斯", "欧文", "欧文",
"杜兰特", "库里", "欧文", "詹姆斯", "库里"
]
# 统计次数
counter = {}
for player in records:
counter[player] = counter.get(player, 0) + 1
# 按次数从高到低排序
ranking = sorted(counter.items(), key=lambda x: x[1], reverse=True)
print("=== 转身过人次数排行榜 ===")
for i, (name, count) in enumerate(ranking, 1):
print(f"第{i}名:{name} —— {count} 次")
# 找出最多的人
top_player, top_count = ranking[0]
print(f"\n🏆 转身过人王:{top_player},共 {top_count} 次")
输出示例:
=== 转身过人次数排行榜 ===
第1名:欧文 —— 5 次
第2名:库里 —— 5 次
第3名:詹姆斯 —— 3 次
第4名:杜兰特 —— 2 次
🏆 转身过人王:欧文,共 5 次
进阶版(使用 collections.Counter,更简洁)
from collections import Counter
records = [
"库里", "詹姆斯", "库里", "欧文", "杜兰特",
"欧文", "库里", "詹姆斯", "欧文", "欧文",
"杜兰特", "库里", "欧文", "詹姆斯", "库里"
]
counter = Counter(records)
# 打印所有统计
print("全部统计:", dict(counter))
# 找出最多的(most_common 返回列表,按次数降序)
ranking = counter.most_common()
print("\n=== 排行榜 ===")
for rank, (name, count) in enumerate(ranking, 1):
print(f"{rank}. {name}: {count} 次")
# 处理并列第一的情况
max_count = ranking[0][1]
winners = [name for name, cnt in ranking if cnt == max_count]
print(f"\n🏆 转身过人最多:{'、'.join(winners)}(各 {max_count} 次)")
真实场景版(带时间、球队、是否成功的结构化数据)
from collections import defaultdict
from datetime import datetime
# 结构化比赛数据:球员、球队、动作、是否成功、时间
events = [
{"player": "欧文", "team": "独行侠", "action": "转身过人", "success": True},
{"player": "库里", "team": "勇士", "action": "转身过人", "success": True},
{"player": "詹姆斯", "team": "湖人", "action": "转身过人", "success": False},
{"player": "欧文", "team": "独行侠", "action": "转身过人", "success": True},
{"player": "库里", "team": "勇士", "action": "转身过人", "success": True},
{"player": "杜兰特", "team": "太阳", "action": "转身过人", "success": True},
{"player": "欧文", "team": "独行侠", "action": "转身过人", "success": True},
{"player": "库里", "team": "勇士", "action": "转身过人", "success": False},
{"player": "詹姆斯", "team": "湖人", "action": "转身过人", "success": True},
{"player": "欧文", "team": "独行侠", "action": "转身过人", "success": True},
]
# 统计:只统计成功的转身过人
stats = defaultdict(lambda: {"total": 0, "success": 0, "team": ""})
for e in events:
if e["action"] != "转身过人":
continue
p = e["player"]
stats[p]["team"] = e["team"]
stats[p]["total"] += 1
if e["success"]:
stats[p]["success"] += 1
# 计算成功率并排序
result = []
for player, info in stats.items():
rate = info["success"] / info["total"] * 100
result.append({
"player": player,
"team": info["team"],
"success_count": info["success"],
"total_count": info["total"],
"rate": rate
})
result.sort(key=lambda x: x["success_count"], reverse=True)
print(f"{'排名':<4}{'球员':<8}{'球队':<8}{'成功次数':<8}{'总次数':<8}{'成功率':<8}")
print("-" * 50)
for rank, r in enumerate(result, 1):
print(f"{rank:<5}{r['player']:<9}{r['team']:<9}"
f"{r['success_count']:<10}{r['total_count']:<9}{r['rate']:.1f}%")
# 找出最多者(处理并列)
max_cnt = result[0]["success_count"]
winners = [r["player"] for r in result if r["success_count"] == max_cnt]
print(f"\n🏆 转身过人次数最多:{'、'.join(winners)}({max_cnt} 次)")
输出示例:
排名 球员 球队 成功次数 总次数 成功率
--------------------------------------------------
1 欧文 独行侠 4 4 100.0%
2 库里 勇士 2 3 66.7%
3 杜兰特 太阳 1 1 100.0%
4 詹姆斯 湖人 1 2 50.0%
🏆 转身过人次数最多:欧文(4 次)
关键知识点
| 技术点 | 用途 |
|---|---|
dict.get(k, 0) |
安全计数(避免 KeyError) |
Counter |
快速频率统计 |
defaultdict |
分组聚合更优雅 |
sorted(key=..., reverse=True) |
排行榜排序 |
| 并列处理 | 判断 count == max_count |
扩展建议
- 读取真实数据:用
pandas从 Excel/CSV 读取比赛数据import pandas as pd df = pd.read_excel("比赛数据.xlsx") df[df["动作"]=="转身过人"]["球员"].value_counts() - 可视化:用
matplotlib画柱状图对比 - 时间维度:统计每节/每场比赛的转身过人分布
如果你有真实的比赛数据格式(CSV 字段说明),告诉我,我可以帮你改成直接适配的代码。