这是在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)
我就是这样做的.我使用的洞察力是,实际上只有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)