如何将数组元素分配至对应n-1的数组位置?求实现方案
问题描述
现有数组[1, 2, 3, 4, 5],打乱后得到[1, 5, 4, 2, 3]。目标是根据打乱后的数组,将每个数字放到值对应的索引位置(索引从1开始)——比如数字1要在第1位,数字2要在第5位,数字3要在第4位,最终示例输出为[1, 4, 5, 3, 2]。目前已实现打乱数组的代码如下:
import numpy as np import random array = np.arange(1,6) print(array) random.shuffle(array) print(array)
需要实现上述目标分配逻辑,询问是否有内置函数或简易代码方案。
实现方案
不需要特殊内置函数,用基础的数组/列表操作就能快速实现,核心逻辑是将每个数字映射到其值对应的索引位置(注意Python索引从0开始,需做减1转换)。
纯Python实现
import random # 原始数组 original = [1, 2, 3, 4, 5] # 打乱数组 random.shuffle(original) shuffled_arr = original.copy() print("打乱后的数组:", shuffled_arr) # 生成目标数组 target = [0] * len(shuffled_arr) for num in shuffled_arr: # 数字num对应第num位(从1开始),转换为0索引需减1 target[num - 1] = num print("目标数组:", target)
Numpy实现
如果习惯用Numpy,可以利用数组索引直接赋值,效率更高:
import numpy as np import random array = np.arange(1,6) random.shuffle(array) print("打乱后的数组:", array) # 生成目标数组 target = np.zeros_like(array) # 用数组值作为索引(减1适配0开始的索引) target[array - 1] = array print("目标数组:", target)
逻辑说明
两种方法本质相同:
- 先创建一个与原数组长度一致的空容器(列表或Numpy数组)
- 遍历打乱后的每个数字,将其放置到
数字值-1的索引位置 - 最终结果中,数字
n必然处于第n位(从1开始计数)
内容的提问来源于stack exchange,提问作者Matteo
相关产品推荐
相关产品推荐

