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

如何基于指定条件合并两个维度相同的二维数组

实现方案

核心取值逻辑:遍历两个数组的每个对应位置,仅当数组b对应位置元素非0、且和数组a同位置元素不相等时,取b的值,其余场景全部取a的值。

原生Python实现(无需第三方依赖)

先定义你的输入数组:

a = [
    [1, 1, 1, 1],
    [1, 0, 0, 1],
    [1, 0, 0, 1],
    [1, 1, 1, 1],
]

b = [
    [0, 1, 1, 0],
    [0, 0, 0, 0],
    [2, 0, 0, 2],
    [0, 0, 0, 0],
]

常规循环写法(可读性高)

c = []
for row_a, row_b in zip(a, b):
    new_row = []
    for val_a, val_b in zip(row_a, row_b):
        if val_b != 0 and val_b != val_a:
            new_row.append(val_b)
        else:
            new_row.append(val_a)
    c.append(new_row)

列表推导式写法(更简洁)

c = [
    [val_b if val_b != 0 and val_b != val_a else val_a for val_a, val_b in zip(row_a, row_b)]
    for row_a, row_b in zip(a, b)
]

NumPy实现(适合大尺寸数组,性能更高)

import numpy as np

a_np = np.array(a)
b_np = np.array(b)

# 生成符合替换条件的位置掩码
replace_mask = (b_np != 0) & (b_np != a_np)
# 先复制a的所有值,再替换符合条件的位置
c_np = a_np.copy()
c_np[replace_mask] = b_np[replace_mask]

# 如果需要转回普通Python列表,执行下方代码即可
# c = c_np.tolist()

最终输出的c和你预期的结果完全一致:

[[1, 1, 1, 1], [1, 0, 0, 1], [2, 0, 0, 2], [1, 1, 1, 1]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:51:00