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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:54:03