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

根据给定索引替换numpy数组指定位置元素的实现问题

现有代码的核心问题
  • 逻辑错误:内层循环的else分支会覆盖之前匹配成功的赋值结果。比如处理i=0时,j=0匹配成功将Arr1[0]赋值为Arr2[0],但j循环到1时,i=0不等于Arr3[1]=2,else分支又把Arr1[0]改回了原始值,所有匹配操作最终都被不匹配的循环步还原了。
  • 数组类型不兼容:你声明使用的是numpy数组,而numpy常规数组要求所有元素的维度、类型统一,直接把单个数值替换为长度为2的数组会触发广播逻辑,无法得到你需要的混合维度存储效果。
正确实现方案

你不需要双重循环,直接遍历Arr3和Arr2的对应关系赋值即可,以下是可直接运行的实现:

# 纯Python列表实现(适配你需要的混合维度输出)
Arr1 = [9,7,3,1]
Arr2 = [[14,6],[13,2]]
Arr3 = [0,2]

# 先把Arr1的单个值都包装为单元素列表,统一结构
output = [[x] for x in Arr1]
# 按对应关系替换
for arr2_idx, arr1_pos in enumerate(Arr3):
    output[arr1_pos] = Arr2[arr2_idx]

print(output)
# 输出:[[14, 6], [7], [13, 2], [1]]

如果要使用numpy数组实现,需要指定数组为object类型来兼容不同长度的子序列:

import numpy as np

Arr1 = np.array([9,7,3,1])
Arr2 = np.array([[14,6],[13,2]])
Arr3 = np.array([0,2])

# 初始化object类型的空数组
output = np.empty(len(Arr1), dtype=object)
# 填充初始值
for i in range(len(Arr1)):
    output[i] = [Arr1[i]]
# 按对应关系替换
for arr2_idx, arr1_pos in enumerate(Arr3):
    output[arr1_pos] = Arr2[arr2_idx]

print(output.tolist())
# 输出:[[14, 6], [7], [13, 2], [1]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:36:08