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

Python中使用二维数组/列表生成唯一随机数的解决方案

核心问题点

之前代码达不到预期的原因非常明确:

  • 3行8列的数组总共需要24个元素,1~9区间仅9个不同数字,按照鸽巢原理,不可能填充出24个完全不重复的元素
  • 在嵌套循环内反复调用random.sample()会重复生成新的随机序列,最终填充的元素数量自然会超出预期。
正确实现方案

正确逻辑是一次性生成足量的全局唯一随机数,再按行列长度切片拆分即可,不需要嵌套循环逐个赋值,代码如下:

import random

rows = 3
cols = 8
total = rows * cols
# 取值范围可根据需求调整,只需保证范围内整数总数 >= 元素总个数即可
# 示例取1~24区间的不重复随机数,刚好凑够24个元素
unique_nums = random.sample(range(1, total + 1), total)

# 按列长度切片,直接生成目标规格的二维数组
my2DList = [unique_nums[i*cols : (i+1)*cols] for i in range(rows)]

# 保留原代码的打印格式
row_str = ""
for x in range(rows):
    for y in range(cols):
        row_str += f"{my2DList[x][y]},"
    print(row_str[:-1])
    row_str = ""
注意事项
  • 如果强行要求取值范围限定在1~9,不可能实现全元素不重复,9个数字最多支撑9个不重复元素位,剩余位置必然出现重复
  • 如果需要更换随机数取值池,只需要修改random.sample()的第一个参数即可,比如要从1~100里抽24个不重复数,就写random.sample(range(1, 101), total)
  • 一次性生成序列再切片的写法,避免了循环内反复调用随机接口的问题,执行效率更高,也不会出现元素数量超标的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:57:16