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

不使用pandas如何按子列表前两项匹配求嵌套列表交集并拼接末项

实现方案

核心思路

用字典做匹配映射能把时间复杂度控制在O(n+m),比双重循环的O(n*m)效率高很多,尤其数据量大的时候优势明显:

  1. 先把list2处理成字典:以每个子列表前两项组成的不可变元组作为键,对应子列表的末尾元素作为值
  2. 遍历list1的每个子列表,同样取前两项转成元组去字典里匹配
  3. 匹配成功就把前两项+list1的末尾元素+匹配到的list2的末尾元素拼成新子列表,加入结果集

可直接运行的代码

# 注意示例里的字符串要加引号,否则Python会报未定义变量错误
list1 = [[123, 'Harold', 5], [321, 'John', 3], [222, 'John', 2]]
list2 = [[333, 'James', 3], [123, 'Harold', 6], [999, 'John', 2]]

# 构建list2的匹配映射
match_map = {tuple(item[:2]): item[-1] for item in list2}

# 生成结果
intersect_list = []
for item in list1:
    key = tuple(item[:2])
    if key in match_map:
        intersect_list.append(item[:2] + [item[-1], match_map[key]])

print(intersect_list)

运行输出

和预期结果完全一致:

[[123, 'Harold', 5, 6]]

边缘情况兼容

如果存在特殊场景可以简单调整代码适配:

  • 要是前两项匹配后需要拼接除了前两项之外的所有元素,把代码里的item[-1]改成item[2:]即可
  • 要是允许同一个匹配键在list2里有多个对应值,把字典的value改成列表存储所有对应值即可

内容的提问来源于stack exchange,提问作者Anders Begtorp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:45:04