生成100个随机数,使得100个数中只有25个将大于0.(剩余将为0)

2 python random

这是在2-d网格中打印100个随机数的代码.

[[random.randint(1,25) for i in range(10)] for j in range(10)]
Run Code Online (Sandbox Code Playgroud)

如何打印随机数,使得100个随机打印的数字中只有25个的值大于0?在网格的随机位置中,剩余的所有75个数字应为0.

这就是我的意思.例如,让我们考虑一个5*5的表,其中只允许12个数字大于0.剩下的所有(13)数字应该是0.数字应该随机生成并随机生成.

[[ 1, 0, 7, 0, 0],
 [5, 9 , 0 , 0 , 2]
 [3, 0 , 0 , 6, 0]
 [11, 7, 0 , 3, 0]
 [0, 0, 3,  9, 0]]
Run Code Online (Sandbox Code Playgroud)

Rob*_*obᵩ 7

我就是这样做的.我使用的洞察力是,实际上只有25个数字是随机生成的.剩下的75个是固定的.这导致表达:

[random.randint(1,25) for i in range(25)] + [0]*75
Run Code Online (Sandbox Code Playgroud)

你可以随机混合零:

random.shuffle(result)
Run Code Online (Sandbox Code Playgroud)

并将结果重塑为10x10网格:

result = [result[i*10:(i+1)*10] for i in range(10)]
Run Code Online (Sandbox Code Playgroud)

完整计划:

import random
import pprint

result = [random.randint(1,25) for i in range(25)] + [0]*75
random.shuffle(result)
result = [result[i*10:(i+1)*10] for i in range(10)]
pprint.pprint(result)
Run Code Online (Sandbox Code Playgroud)