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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:43:14