数组行匹配时提取另一数组值为目标数组新增列的实现问题
实现方案
以下提供两种常用的实现方式,你可以根据自己的技术栈选择:
NumPy 实现(适合数值数组,性能更高)
如果你用NumPy处理数组,直接用向量化操作即可,代码如下:
import numpy as np # 替换为你自己的两个数组变量即可 # arr1 = np.array([[1,2,1,0,2,0,1], ...]) # arr2 = np.array([[1,2,1,0,2,0], ...]) # 提取arr1每行前6位作为匹配基准 match_template = arr1[:, :6] # 逐行对比得到匹配结果掩码 row_match = (arr2 == match_template).all(axis=1) # 生成待追加的列:匹配取arr1最后一位,不匹配取0 append_col = np.where(row_match, arr1[:, -1], 0) # 拼接得到最终结果 result = np.hstack([arr2, append_col.reshape(-1, 1)])
原生Python实现(无需依赖第三方库)
如果是普通嵌套列表结构,直接遍历逐行处理即可:
# 替换为你自己的两个嵌套列表变量 # arr1 = [[1,2,1,0,2,0,1], ...] # arr2 = [[1,2,1,0,2,0], ...] result = [] for idx, row2 in enumerate(arr2): # 循环复用arr1的行模板,适配arr2长度超过arr1的场景 row1 = arr1[idx % len(arr1)] if row2 == row1[:6]: result.append(row2 + [row1[-1]]) else: result.append(row2 + [0])
注意事项
- 两种实现都默认元素为可直接对比的数值类型,若有字符串等特殊类型只要支持
==对比逻辑同样适用 - 原生实现里已经做了arr1的循环复用适配,如果你不需要可以直接用
zip(arr1, arr2)遍历即可
内容的提问来源于stack exchange,提问作者Gus
相关产品推荐
相关产品推荐

