在Python中随机生成2D列表

2024-04-23 09:02:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试生成5x5列表,其中正好有10个放置在2D列表中的随机位置

我想让剩下的条目为零。我怎样才能做到

import random

def randomNumbers():

    mylist=[random.randint(0, 1) for _ in range(5)]
    return mylist

Tags: inimport列表forreturndef条目range
3条回答

也许可以试试这个(使用NumPy):

  1. 创建一个零的nxn矩阵
  2. 而这个矩阵的和>;10,继续随机选择2个索引,并将该值设置为1
def get_output(shape, n):
    Z = np.zeros(shape)

    while np.sum(Z)<n:
        Z[np.random.randint(0,shape[0]),np.random.randint(0,shape[1])] = 1
    
    return Z

get_output((5,5), 10)
array([[0., 0., 1., 1., 0.],
       [1., 0., 1., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 1., 1., 1., 0.],
       [0., 1., 0., 1., 0.]])
get_output((3,3), 2)
array([[1., 0., 0.],
       [0., 0., 0.],
       [1., 0., 0.]])

你可以这样做

from random import shuffle
def randomNumbers():
    l=[1 for _ in range(10)]+[0 for _ in range(15)]
    shuffle(l)
    lst=[]
    for i in range(0,25,5):
        lst.append(l[i:i+5])
    return lst

一种方法是从一个二维列表开始,其中填充零,然后选择十个不同的坐标,在其中插入一个:

from random import sample

width = 5
height = 5
sample_size = 10

assert sample_size <= width * height

matrix = [[0] * width for _ in range(height)]

for x, y in sample([(x, y) for x in range(width) for y in range(height)], k=sample_size):
    matrix[y][x] = 1

for row in matrix:
    print(row)

输出:

[0, 0, 0, 1, 1]
[1, 0, 0, 1, 0]
[0, 0, 1, 1, 1]
[1, 1, 1, 0, 0]
[0, 0, 0, 0, 0]
>>> 

相关问题 更多 >