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

Python中如何不使用长for循环查找两个n*m数组的相同列索引

需求说明

现有两个n*m结构的Python列表数组,示例定义如下:

array1 = [[1, 2, 3], [4, 5, 6], [2, 5, 8], [5, 6, 9] ]
array2 = [[1, 2, 3], [2, 5, 8]]

需要找到array2的所有行在array1中对应的索引值(示例对应结果为0和2),要求不使用冗长的for循环实现。
注:原描述中“列”应为笔误,根据示例数据匹配关系实际为匹配行索引

实现方法

方法1:原生Python列表推导式(无需第三方库)

直接用enumerate结合成员判断,一行即可完成,代码简洁易读:

# 基础版本,适合数据量较小的场景
res = [idx for idx, row in enumerate(array1) if row in array2]
print(res) # 输出:[0, 2]

如果数据量较大,可以提前把array2的行转成元组存入集合,降低成员判断的时间复杂度:

# 优化版本,适合大数据量场景
array2_tuple_set = set(tuple(row) for row in array2)
res = [idx for idx, row in enumerate(array1) if tuple(row) in array2_tuple_set]

方法2:Numpy向量化操作(适合数值型数组)

如果已经引入Numpy做数值计算,可以用广播机制一次性完成批量对比,完全不需要显式写循环逻辑:

import numpy as np
arr1 = np.array(array1)
arr2 = np.array(array2)
res = np.where((arr1[:, None] == arr2).all(-1).any(1))[0].tolist()
print(res) # 输出:[0, 2]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:45:04