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

如何将数组元素分配至对应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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:28:14