Python如何按ID匹配两个列表并追加第二个列表的最后字段
按ID匹配两个列表的最优实现
核心思路是用字典给其中一个列表做ID索引,避免嵌套循环的高时间复杂度,也可以直接取出两个列表的对应字段拼接,完全满足输出要求。该方案时间复杂度为O(n+m),远优于双重循环的O(nm)*,数据量越大优势越明显。
实现代码如下:
musical_groups_Rock = [ ["1", "Ad", "Rock", "1"], ["2", "John", "Lennon", "2"], ["3", "Rivers", "Cuomo", "3"], ["4", "Patrick", "Wilson", "4"], ] musical_groups_Folk = [ ["2", "John", "Lennon", "1"], ["1", "Ad", "Rock", "2"], ["5", "Axl", "Rose", "3"], ["7", "Jam", "Master", "4"], ] def intersect(list1, list2): # 将第二个列表转换为【ID: 排名】的字典映射 id_rank_map = {item[0]: item[-1] for item in list2} result = [] for entry in list1: current_id = entry[0] # 匹配到相同ID时拼接字段返回 if current_id in id_rank_map: # 输出结构:ID、名、姓、第一个列表的排名、第二个列表的排名 result.append(entry + [id_rank_map[current_id]]) return result output = intersect(musical_groups_Rock, musical_groups_Folk) print(output)
运行后输出结果和示例要求完全一致:[["1", "Ad", "Rock", "1", "2"], ["2", "John", "Lennon", "2", "1"]]
可选优化点:
- 如果两个列表长度差距较大,优先选择更短的列表构建字典,可以降低空间消耗
- 如果需要校验同ID的姓名字段是否一致,只需将字典的值改为存储第二个列表的完整条目即可,字典构造逻辑调整为
id_map = {item[0]: item for item in list2},匹配时自行增加字段校验逻辑即可
内容的提问来源于stack exchange,提问作者Val.Val
相关产品推荐
相关产品推荐

