Python元组合并问题:匹配球员名称添加对应市场价值字段
球员数据匹配问题的修复
原代码的核心错误
- 内层循环每一次不匹配就立即给元组追加
'undef',导致匹配到正确数据前,元组已被多次添加无效字段,结构完全混乱 - 未匹配到数据时,错误地在循环内重复追加字段,而非统一添加需求指定的
'unknown'
修正后的双重for循环实现(符合需求)
player_stat =[ ('Harry Kane', '34', '19'), ('Player E', '35', '20'), ('Lionel Messi', '34', '14'), ('Player F', '35', '11'), ('Player A', '35', '17'), ('Player B', '35', '15'), ('Kylian Mbappe', '35', '18'), ('Player C', '35', '18'), ('Erling Haaland','35','21'), ('Player D', '35', '19'), ] market_value = [ ('Erling Haaland','138M'), ('Harry Kane', '120M'), ('Lionel Messi', '118.7M'), ('Kylian Mbappe', '115M'), ('Player A', '107M'), ('Player B', '108M'), ('Player E', '100M'), ('Player F', '98M'), ] # 遍历每个球员的统计数据 for i in range(len(player_stat)): has_value = False # 遍历市场价值列表查找匹配的球员 for player_mv in market_value: if player_stat[i][0] == player_mv[0]: # 匹配成功,追加对应市场价值 player_stat[i] = player_stat[i] + (player_mv[1],) has_value = True break # 未找到匹配数据,追加'unknown' if not has_value: player_stat[i] = player_stat[i] + ('unknown',) # 输出验证结果 for stat in player_stat: print(stat)
代码逻辑说明
- 新增
has_value标记,用于记录当前球员是否找到对应的市场价值数据 - 内层循环仅负责查找匹配,不执行任何追加操作,避免多次添加无效字段
- 内层循环结束后,根据
has_value的状态统一追加数据:匹配到则加身价,未匹配则加'unknown',确保每个元组仅追加一个字段 - 完全符合需求:匹配球员追加对应身价,无数据的Player C、D等追加
'unknown'
更高效的优化方案(字典映射)
如果数据量较大,双重循环的O(n*m)时间效率较低,可以先将market_value转换为字典,再快速匹配:
# 将市场价值列表转换为字典,键为球员名,值为身价 mv_dict = dict(market_value) for i in range(len(player_stat)): player_name = player_stat[i][0] # 从字典获取身价,不存在则返回'unknown' value = mv_dict.get(player_name, 'unknown') player_stat[i] = player_stat[i] + (value,)
该方案时间复杂度降至O(n+m),执行效率更高,最终结果与需求完全一致。
内容的提问来源于stack exchange,提问作者Jihoon Kim
相关产品推荐
相关产品推荐

