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

如何通过给定的索引数组将数组恢复到初始状态

数组还原实现方案

首先明确索引规则:indices[i] 代表原数组下标i的元素,现在位于当前arr数组的indices[i]下标位置,因此还原逻辑为还原后的数组第i位元素 = 当前arr数组第indices[i]位的元素,两种实现方式如下:

方式1:纯Python原生实现(无依赖)

直接通过列表推导式生成还原后的数组:

# 输入当前数组和索引映射数组
current_arr = [4, 7, 2, 5]
indices = [0, 2, 1, 3]

# 还原操作
original_arr = [current_arr[indices[i]] for i in range(len(current_arr))]
print(original_arr)
# 输出结果:[4, 2, 7, 5]

方式2:Numpy实现(适合大规模数组场景)

利用Numpy的高级索引特性,一行代码完成还原,运算效率更高:

import numpy as np

# 输入转为numpy数组
current_arr = np.array([4, 7, 2, 5])
indices = np.array([0, 2, 1, 3])

# 还原操作
original_arr = current_arr[indices]
print(original_arr)
# 输出结果:[4 2 7 5]

补充:原地修改数组方案

如果不需要保留当前数组,想直接在原数组上修改节省内存,可以用标记访问的方式避免重复交换:

current_arr = [4, 7, 2, 5]
indices = [0, 2, 1, 3]
visited = [False] * len(current_arr)

for i in range(len(current_arr)):
    if not visited[i] and indices[i] != i:
        current_arr[i], current_arr[indices[i]] = current_arr[indices[i]], current_arr[i]
        visited[indices[i]] = True
    visited[i] = True

print(current_arr)
# 输出结果:[4, 2, 7, 5]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:15:03