【发布时间】:2017-04-19 13:51:45
【问题描述】:
我想要一个随机列表,其中 1 的出现率为 10%,其余项目为零。这个列表的长度是 1000。我希望这些值是随机顺序的,以便它们之间有一个可调整的最小距离。因此,例如,如果我选择值 3,则列表将如下所示:
[0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, ...]
实现这一目标最优雅的方法是什么?
编辑。我被要求提供更多信息并表现出一些努力。
这适用于一项研究,其中 0 表示一种刺激,1 表示另一种刺激,我们希望刺激类型 1 之间的距离最小。
到目前为止,我已经通过以下方式实现了这一目标:
trials = [0]*400
trials.extend([1]*100)
random.shuffle(trials)
#Make sure a fixed minimum number of standard runs follow each deviant
i = 0
while i < len(trials):
if trials[i] == 1:
trials[i+1:i+1] = 5*[0]
i = i + 6
else:
i = i + 1
这给了我一个长度为 1000 的列表,但对我来说似乎有点笨拙,所以出于好奇,我想知道是否有更好的方法来做到这一点。
【问题讨论】:
-
列表中应该总是正好有 100 个,还是应该在总数中有一些小的随机变化?后者可能更“真实”,因为抛一枚公平的硬币 100 次并不总能得到正好 50 个正面,但它可能更难实现。
-
这是一个测验还是家庭作业,或者您可以为此提供一个实际的用例。无论如何,SO 不是一个代码编写服务,所以至少要付出一些努力来解决这个问题。
-
@Kevin 我编辑了这个问题,是的,应该正好有 100 个。
-
这是 Python 3.6 还是什么版本?