import random
a = [0]
b = [1]
for row in range(1):
for colum in range(5):
random.shuffle(a and b)
print (" ".join( repr(e) for e in a + b[:5]))
嗨,
因此,我正在尝试创建一个填充为1或0的5 x 5矩阵,但是要实现它有些困难。我使用上面的代码尝试了一下,但是没有用。我是python编程的新手,所以要轻柔哈哈。
这是理想的结果:(矩阵中必须有至少10 1的最小值。如何做到这一点的任何想法?
0 1 1 1 1
0 1 1 0 0
0 1 1 0 1
1 1 0 1 1
1 1 1 1 1
任何建议将不胜感激。谢谢! :)
答案 0 :(得分:4)
您可以先获取10到25之间的随机数,然后创建一个列表,其中包含多个1,后跟0,以达到25。
import random
ones = random.randint(10, 25)
l = [1] * ones + [0] * (25-ones)
[1] * ones
创建一个带有ones
1的列表。 [0] * (25-ones)
创建一个列表,剩余的0。然后使用+
将它们连接起来,以产生一个包含25个项目的列表。
然后随机播放此列表:
random.shuffle(l)
最后将值复制到5x5矩阵中:
matrix = [l[i:i+5] for i in range(0, 25, 5)]
range(0, 25, 5)
通过0
从25
迭代到5
,即0
,5
,10
等。然后l[i:i+5]
从每个索引中开始,抽取了5个元素。列表理解将这些全部组合成一个二维列表。
答案 1 :(得分:2)
您可以使用numpy.random.randint
>>> import numpy as np
>>> np.random.randint(0, 2, (5, 5))
array([[1, 1, 1, 0, 0],
[1, 0, 1, 1, 1],
[0, 1, 1, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0]])
然后丢弃少于10个的解决方案
用于计数1(因为您只有0和1)
>>> data = np.random.randint(0, 2, (5, 5))
>>> data.sum()
13
答案 2 :(得分:0)
random.choices
结合列表理解是一种快速的方法。通常,您会有10个,但是您可以循环直到确定为止:
from random import choices
total = 0
while total < 10:
matrix = [choices((0, 1), k=5) for i in range(5)]
total = sum(map(sum, matrix))
print(matrix)
[[1,1,1,0,0],
[1,0,0,1,0],
[1,1,0,0,0],
[0,0,1,1,0],
[1、0、1、0、0]]
答案 3 :(得分:0)
实际上,我亲爱的朋友有一个解决此问题的简单方法,您应该将所有代码放在“如果 name ==“ main ”之后:”
import random
def log_matrix(matrix):
for r in range(len(matrix)):
print(" ".join([str(i) for i in matrix[r]]))
def sum_matrix(matrix):
return sum(map(sum, matrix))
def gen_matrix(row, col, minimum):
random_matrix = [[random.choice([0, 1]) for _ in range(row)]
for _ in range(col)]
while sum_matrix(random_matrix) < minimum:
random_matrix[random.choice([0, row - 1])][random.choice(
[0, col - 1])] = 1
return random_matrix
if __name__ == "__main__":
random_matrix = gen_matrix(5, 5, 10)
log_matrix(random_matrix)