Python 2D列表按首列去重并对其余数值列求和的高效实现
球员数据汇总高效实现方案
最优实现方式是使用字典作为临时统计容器,利用字典键的唯一性自动聚合同一名球员的统计数据,整体时间复杂度为O(n),远高于先查重复索引再合并的方案,且代码逻辑更简洁易维护。
完整实现代码如下:
player_stats = [['Adam', 5, 10], ['Kyle', 12, 18], ['Jo', 20, 35], ['Adam', 15, 20], ['Charlie', 31, 58], ['Jo', 6, 14], ['Adam', 10, 15]] # 初始化字典存储每个球员的总进球、总射正 temp_stats = {} for name, goals, shots_on in player_stats: if name not in temp_stats: temp_stats[name] = [0, 0] temp_stats[name][0] += goals temp_stats[name][1] += shots_on # 转换为要求的列表格式 player_stats_totals = [[name, *data] for name, data in temp_stats.items()]
运行后得到的player_stats_totals和你给出的预期输出完全一致:[['Adam', 30, 45], ['Kyle', 12, 18], ['Jo', 26, 49], ['Charlie', 31, 58]]
你之前找到的查找重复索引的方法时间复杂度为O(n²),每次判断元素是否在切片中都需要遍历对应子列表,数据量较大时性能会出现明显下降,不适合用于该统计汇总场景。
内容的提问来源于stack exchange,提问作者Mikey
相关产品推荐
相关产品推荐

