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
相关产品推荐
相关产品推荐

