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

Python处理棒球赛事数据如何回溯索引将盗垒标记对应到正确选手行

问题原因

你当前的代码逻辑是将Stolen Base标记打在出现「stolen base」关键词的行,但盗垒的球员是此前已经完成打席上垒的球员,因此需要先定位盗垒球员对应的打席行,再做标记。

实现代码
import re

hitters = ['Player A', 'Player B', 'Player C', 'Player D', 'Player E']
play_by_play = [
    'Swinging Strike, Ball, Player A advances to 1st (hit by pitch),',
    'Swinging Strike, Swinging Strike, Ball, Player A advances to 2nd (stolen base), Player B putout (strike out swinging) for out number 2,',
    'Swinging Strike, Swinging Strike, Ball, Player C advances to 1st (single), Player A advances to 3rd ( 2), Player A Scores Earned ( 22),',
    'Ball, Ball, Player D advances to 1st (single), Player C advances to 2nd (27),',
    'Ball, Swinging Strike, Swinging Strike, Ball, Player E putout (strike out swinging) for out number 3,'
]

# 初始化所有打席的盗垒标记为0
stolen_bases = [0] * len(hitters)
# 正则规则:匹配盗垒事件对应的球员姓名
steal_pattern = re.compile(r'(\w+\s*\w+) advances to \d+ \(stolen base\)')

for play in play_by_play:
    match_res = steal_pattern.search(play)
    if match_res:
        # 提取盗垒球员名
        steal_player = match_res.group(1)
        # 匹配该球员在打席列表的位置,打标记
        if steal_player in hitters:
            player_idx = hitters.index(steal_player)
            stolen_bases[player_idx] = 1
        # 单局多盗垒可删除break,保留多轮匹配
        break

# 输出结果对应你需要的标记顺序 [1, 0, 0, 0, 0]
print(stolen_bases)
逻辑说明
  • 无需使用固定索引切片,会自动遍历所有比赛记录查找盗垒事件
  • 自动提取盗垒涉事球员姓名,匹配其对应打席行做标记,适配任意位置出现的盗垒事件
  • 如果单局存在多次盗垒,删除代码中的break即可支持多标记

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:54:05