Python:统计二维数组每行与目标数组的元素匹配数量
问题与解决方案
给定数据
a = [ ['Active', '1.0', '0.0', 'Business', 'London'], ['Active', '0.0', '0.0', 'Business', 'Scotland'] ] b = ['Active', '0.0', '0.0', 'Retail', 'London']
需求与期望输出
需要统计二维数组a中每行与一维数组b对应列元素的匹配数量(顺序必须严格对应同列),期望输出为[3, 3]——a的第0行与b有3个同列元素匹配,第1行同样有3个。同时需考虑大规模数组的处理性能。
已尝试的错误代码
[sum(x==y) for x,y in zip(a,b)]
错误原因:zip(a,b)会把a的每一行和b的单个元素配对(比如a的第一行和b[0]配对),而非将a的每一行与整个b逐元素比较,逻辑完全错误。
可行解决方案
1. 纯Python基础实现(适用于中小规模数据)
通过列表推导式,对a的每一行,逐元素与b对应位置比较后求和:
[sum(x == y for x, y in zip(row, b)) for row in a]
执行后直接得到预期的[3, 3],逻辑简单直观。
2. 高性能实现(适用于大规模数据)
使用numpy的向量化运算,能大幅提升处理效率:
import numpy as np # 转换为numpy数组 a_np = np.array(a) b_np = np.array(b) # 逐元素比较后按行求和,再转回列表 result = (a_np == b_np).sum(axis=1).tolist()
向量化运算避免了Python循环的开销,处理百万级以上数据时性能优势明显。
内容的提问来源于stack exchange,提问作者Robbie G
相关产品推荐
相关产品推荐

