不使用pandas高效查找数组元素在另一数组中对应索引的方法
数组元素匹配索引的高效实现方案
需求背景
已知两个数组:arr1 = ["ABC","DEF","GHI","XYZ"]arr2 = ["ABC","XYZ"]
需要获取arr2每个元素在arr1中对应的索引,预期输出为[0,3]。
原有基于pandas lambda遍历的实现需要对arr2的每个元素都执行一次全arr1匹配,数组量级较大时性能较低,以下是优先推荐的NumPy向量化实现,以及其他可选高效方案:
优先推荐:NumPy实现
该方案为纯向量化操作,避免了循环遍历,数据量越大效率提升越明显,无需引入pandas依赖:
import numpy as np # 转换为numpy数组 np_arr1 = np.array(arr1) np_arr2 = np.array(arr2) # 获取arr1的排序索引 sorter = np.argsort(np_arr1) # 匹配得到对应索引 result = sorter[np.searchsorted(np_arr1, np_arr2, sorter=sorter)].tolist()
输出结果为[0,3],符合预期。如果arr1中存在重复元素,该方案会返回第一个匹配项的索引,适配绝大多数场景需求。
其他可选高效方案
- 纯Python字典映射方案(无需引入第三方依赖,理论时间复杂度最低):
# 构建arr1元素到索引的哈希映射 val_to_idx = {val: idx for idx, val in enumerate(arr1)} # 直接查表得到结果 result = [val_to_idx[x] for x in arr2]
该方案时间复杂度为O(n+m),适合内存可以容纳arr1全量元素做哈希映射的场景。
内容的提问来源于stack exchange,提问作者Rrptm
相关产品推荐
相关产品推荐

