如何通过给定的索引数组将数组恢复到初始状态
数组还原实现方案
首先明确索引规则: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
相关产品推荐
相关产品推荐

