Python 生成100个随机数,使100个数字中只有25个大于0。(剩余为0)
这是在二维网格中打印100个随机数的代码Python 生成100个随机数,使100个数字中只有25个大于0。(剩余为0),python,random,Python,Random,这是在二维网格中打印100个随机数的代码 [[random.randint(1,25) for i in range(10)] for j in range(10)] 如何打印随机数,以便在100个随机打印的数字中,只有25个值大于0?其余所有75个数字应为0,位于网格的随机位置 这就是我的意思。例如,让我们考虑一个5×5表,其中只有12个数字允许大于0。其余所有(13)个数字应为0。这些数字应随机生成,并处于随机位置 [[ 1, 0, 7, 0, 0], [5, 9 , 0 , 0 , 2
[[random.randint(1,25) for i in range(10)] for j in range(10)]
如何打印随机数,以便在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]]
我可以这样做。我使用的见解是,实际上只有25个数字是随机生成的。其余75个是固定的。这就引出了这样一个表达:
[random.randint(1,25) for i in range(25)] + [0]*75
您可以随机混入零:
random.shuffle(result)
并将结果重塑为10x10网格:
result = [result[i*10:(i+1)*10] for i in range(10)]
完整程序:
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)
下面介绍如何在不导入任何新内容或使用洗牌的情况下执行此操作:
import random
indexesOfZeros = []
for i in range(76):
while True:
num = random.randint(0,100)
if num not in indexesOfZeros:
indexesOfZeros.append(num)
break
vals = [random.randint(1,25) if i not in indexesOfZeros else 0 for i in range(100)]
grid = [vals[((x*10)-10):(x*10)] for x in range(1,11)]
print(grid)
因此,这些数字不再是随机的,因为你希望它们之间有一个精确的相关性,@pythonic833。因为零不是随机的,所以不要随机生成它们。生成25个非零随机数,添加75个零,然后
random.shuffle()
结果。@pythonic833这不是真的,你可以根据自己的喜好扭曲分布。“random”你继续使用这个词,我不认为它的意思是你所想的Means@cᴏʟᴅsᴘᴇᴇᴅ 当然,你可以扭曲分布,但如果100个数字中有75个应该是零,你就不能再谈论随机生成它们了,不管你的pdf有多扭曲。谢谢,这正是我想要的。这可以简单得多:index\u of\u zeros=random.sample(范围(0100),75)
。
import random
indexesOfZeros = []
for i in range(76):
while True:
num = random.randint(0,100)
if num not in indexesOfZeros:
indexesOfZeros.append(num)
break
vals = [random.randint(1,25) if i not in indexesOfZeros else 0 for i in range(100)]
grid = [vals[((x*10)-10):(x*10)] for x in range(1,11)]
print(grid)