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
相关产品推荐
相关产品推荐

