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

如何随机打乱数字的指定位置?

随机打乱数字序列的实现方案

嘿,这个需求太常见啦!要随机打乱一组数字的顺序,我们一般用「洗牌算法」来实现,下面给你几种主流编程语言的具体方案,你可以直接套用:

Python 实现

Python 标准库的 random 模块已经帮我们封装好了现成的方法,两种常用方式:

  • 直接修改原列表:
import random

numbers = [1, 9, 7, 4]
random.shuffle(numbers)
print(numbers)  # 每次运行输出不同结果,比如 [9, 1, 4, 7]
  • 不修改原列表,生成新的打乱列表:
import random

numbers = [1, 9, 7, 4]
shuffled_numbers = random.sample(numbers, len(numbers))
print(shuffled_numbers)

JavaScript 实现

推荐用Fisher-Yates 洗牌算法(无偏洗牌,比简单用 sort 更可靠),实现代码如下:

function shuffleArray(array) {
  // 先复制原数组,避免修改原始数据
  const arr = [...array];
  // 从最后一个元素开始向前遍历
  for (let i = arr.length - 1; i > 0; i--) {
    // 随机选取一个从0到i的索引
    const j = Math.floor(Math.random() * (i + 1));
    // 交换当前元素和随机选中的元素
    [arr[i], arr[j]] = [arr[j], arr[i]];
  }
  return arr;
}

const numbers = [1, 9, 7, 4];
console.log(shuffleArray(numbers)); // 输出打乱后的数组,比如 [7, 1, 9, 4]

注意:别用 array.sort(() => Math.random() - 0.5) 这种写法,它在部分浏览器中会导致元素分布不均,不是真正的随机。

Java 实现

借助 Collections 工具类的 shuffle 方法即可:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ShuffleDemo {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(9);
        numbers.add(7);
        numbers.add(4);
        
        Collections.shuffle(numbers);
        System.out.println(numbers); // 打印打乱后的列表
    }
}

核心思路(手动实现逻辑)

如果想自己理解洗牌的原理,核心就是从后往前遍历,每次将当前元素与前面随机位置的元素交换,这样能保证每个元素出现在任意位置的概率完全相等,实现真正的无偏随机打乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:44:12