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

Python中从两数组查匹配对并取第三数组对应值的最快方法

最优解决方案:用哈希映射快速处理唯一数值对

嘿,这个问题我刚好有靠谱的解法!针对三个等长数组(最长5000元素)的场景,最快的实现方式是利用哈希映射(字典),Python里直接用内置工具就足够高效,完全不用额外安装第三方库。

核心思路

哈希表的键具有天然的唯一性,我们可以把前两个数组的数值对(比如(2,3))作为键,第三个数组对应位置的值作为值。这种方法的时间复杂度是O(n)(n为数组长度),比嵌套循环的O(n²)高效太多,5000元素的规模下几乎瞬间就能完成。

两种常见场景的实现

场景1:提取所有不重复的数值对(重复对只保留最后一次出现的对应值)

这种情况直接用Python内置的dict就能搞定,代码极简:

def get_unique_pairs(arr1, arr2, arr3):
    pair_value_map = {}
    # 用zip同时遍历三个数组的元素
    for num1, num2, num3 in zip(arr1, arr2, arr3):
        # 元组(num1, num2)作为字典的键,自动去重
        pair_value_map[(num1, num2)] = num3
    # 返回的字典中,键是唯一数值对,值是第三数组对应位置的值
    return pair_value_map

场景2:只筛选仅出现过一次的数值对

如果需要找出那些在前两个数组里只出现过一次的数值对,我们可以先用一个字典统计次数,再筛选结果,这里用标准库的collections.defaultdict会更方便:

from collections import defaultdict

def get_only_unique_pairs(arr1, arr2, arr3):
    pair_count = defaultdict(int)
    pair_value = {}
    
    for num1, num2, num3 in zip(arr1, arr2, arr3):
        current_pair = (num1, num2)
        pair_count[current_pair] += 1
        pair_value[current_pair] = num3  # 保留最后一次出现的值,若要第一次可改为判断是否已存在
    
    # 筛选出出现次数为1的数值对
    result = {pair: val for pair, val in pair_value.items() if pair_count[pair] == 1}
    return result

为什么这是最快的?

对于5000元素的数组,哈希映射只需要一次遍历就能完成所有操作,而嵌套循环需要进行2500万次比较,效率差距非常明显。而且Python的dict和collections模块都是底层优化过的,性能拉满。

内容的提问来源于stack exchange,提问作者Rajat Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:03:40