如何生成二维网格:100个数中仅25个为正随机数其余为0
实现指定数量随机数的二维网格
我来帮你搞定这个需求!要实现10×10网格里只有25个1-25的随机数、其余为0且位置随机的效果,咱们可以分步骤来做:
思路拆解
- 先创建一个全是0的10×10网格,搭好基础框架
- 随机选出25个不重复的位置(行+列的组合)
- 在这些选中的位置上填充1-25的随机整数
具体代码实现
import random # 步骤1:初始化全0的10×10网格 grid = [[0 for _ in range(10)] for _ in range(10)] # 步骤2:生成25个不重复的随机位置 all_positions = [(i, j) for i in range(10) for j in range(10)] selected_positions = random.sample(all_positions, 25) # 步骤3:给选中位置填充随机数 for row, col in selected_positions: grid[row][col] = random.randint(1, 25) # 打印查看结果(可选) for row in grid: print(row)
代码细节解释
random.sample(all_positions, 25):这个方法能确保选出的25个位置完全不重复,完美满足“仅25个正随机数”的要求,不会出现同一个位置被多次赋值的情况- 先初始化全0网格再替换的方式,比直接生成混合列表更直观,后续调整网格大小或正随机数数量也更方便——比如要做5×5网格12个正随机数,只需要把
range(10)改成range(5),random.sample的第二个参数改成12就行
扩展小技巧
如果想让1-25每个数只出现一次(也就是25个正随机数是1到25的随机排列),可以修改步骤3的代码:
# 生成1-25的随机排列 random_numbers = random.sample(range(1,26), 25) # 一一对应赋值给选中位置 for (row, col), num in zip(selected_positions, random_numbers): grid[row][col] = num
这样每个正整数1-25都会恰好出现一次,位置依然是随机分布的~
内容的提问来源于stack exchange,提问作者user8261552
相关产品推荐
相关产品推荐

