如何使用随机0和1值生成长度 N 的列表,但在列表中随机放置给定数量的1。
例如,我想要一个包含10个元素(0和1)的列表,列表中的1个数字为7。
我该怎么做?
答案 0 :(得分:3)
您可以使列表具有正确的0和1的数字
data = [0] * 3 + [1] * 7
然后使用random.shuffle使其在列表中的位置随机
from random import shuffle
shuffle(data)
print data
[1,1,0,1,1,0,0,1,1,1]
答案 1 :(得分:1)
不使用random.shuffle
的方法:
import random
random.sample([0]*3 + [1]*7, 10) # [1, 1, 1, 1, 0, 0, 0, 1, 1, 1]
答案 2 :(得分:1)
使用numpy
import numpy as np
from random import shuffle
A = np.ones(7, dtype=np.int) // [1 1 1 1 1 1 1] and data-type as integer
B = np.zeros(3, dtype=np.int) // [0 0 0] and data-type as integer
C = np.concatenate((A, B), axis = 0) // [1 1 1 1 1 1 1 0 0 0]
shuffle(C) // [1 0 0 1 1 1 1 0 1 1]
print C
答案 3 :(得分:1)
我喜欢其他答案中的 shuffle()方法;但是,还有另一种使用较少调用随机数生成器的方法。从零列表开始。然后使用 sample()选择应设置为1的7个指标:
>>> from random import sample
>>> result = [0] * 10
>>> for i in sample(range(10), k=7):
result[i] = 1
>>> result
[1, 0, 1, 1, 0, 1, 1, 1, 1, 0]