Python:获取两个数组交集元素在原数组中的索引
优雅获取元素在数组中的索引方案
嗨,刚接触Python就能想着找优雅的实现方式,这点特别棒!针对你提出的需求——从数组B中提取同时存在于A的元素在A中的索引,这里有两个完全符合你“无需结合循环与numpy.where()”要求的简洁方案:
方案一:纯Python字典映射(直观高效)
先通过字典建立A中元素到其索引的映射关系,再直接提取B中对应元素的索引即可,代码非常简洁易懂:
A = [1,2,3,4,5,6,7] B = [2,4,7] # 创建元素与索引的映射字典 element_index_map = {value: idx for idx, value in enumerate(A)} # 提取B中存在于A的元素对应的索引 C = [element_index_map[val] for val in B if val in element_index_map] print(C) # 输出: [1, 3, 6]
这个方法的优势在于字典的查找操作是O(1)时间复杂度,处理大数组时效率也很高,而且完全不需要依赖第三方库,纯Python就能实现。
方案二:numpy无where实现(适合大数据量)
如果你之后会经常处理数值数组,用numpy的内置函数也能优雅解决,而且不用numpy.where():
import numpy as np A = np.array([1,2,3,4,5,6,7]) B = np.array([2,4,7]) # 生成A中元素是否存在于B的掩码 mask = np.in1d(A, B) # 提取掩码为True的位置索引并转为列表 C = np.nonzero(mask)[0].tolist() print(C) # 输出: [1, 3, 6]
np.in1d()会直接生成一个布尔数组标记A中哪些元素在B里,再用np.nonzero()提取这些元素的索引位置,全程没有显式循环,也没用到numpy.where()。
内容的提问来源于stack exchange,提问作者X.Morales
相关产品推荐
相关产品推荐

