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

时间:2018-03-28 21:33:52

标签: python random

这是在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]]

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

以下是如何在不导入任何新内容或使用随机播放的情况下执行此操作:

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)

答案 2 :(得分:0)

import random

source_numbers = [0] * 75 + [random.randint(1, 25) for i in range(25)]
random.shuffle(source_numbers)
grid = []
for i in range(10):
    grid = grid + [source_numbers[i * 10 : (i + 1) * 10]]