Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成100个随机数,使100个数字中只有25个大于0。(剩余为0)_Python_Random - Fatal编程技术网

Python 生成100个随机数,使100个数字中只有25个大于0。(剩余为0)

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

这是在二维网格中打印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]
 [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)