【发布时间】:2018-04-03 07:54:38
【问题描述】:
我有以下清单:
priority=['Emergency','High','Normal','Low']
我需要在上面的列表中生成一个包含 15000 个值的列表,每个值的频率分别为 10%、20%、30%、40%。有人可以告诉我怎么做吗?
【问题讨论】:
-
我已经编辑了这个问题,我的错:)
标签: python list random duplicates
我有以下清单:
priority=['Emergency','High','Normal','Low']
我需要在上面的列表中生成一个包含 15000 个值的列表,每个值的频率分别为 10%、20%、30%、40%。有人可以告诉我怎么做吗?
【问题讨论】:
标签: python list random duplicates
可能最简单的方法是使用 numpy.random 的choice 函数。
import numpy as np
priority=['Emergency','High','Normal','Low']
b = np.random.choice(priority, 150, replace=True, p=[0.1, 0.2, 0.3, 0.4])
print(b)
内置 random.choices 做同样的事情,但它不可用
【讨论】:
您可以使用random.random(),并根据随机数的范围分配索引。
In [21]: priority=['Emergency','High','Normal','Low']
In [22]: idx = lambda x: 0 if x < 0.1 else (1 if x < 0.3 else (2 if x < 0.6 else 3))
In [23]: import random
In [24]: [priority[idx(random.random())] for _ in range(15000)]
Out[24]:
['Normal',
'High',
'Emergency',
'Emergency',
'High',
.
.
在上面,我依靠列表中元素的顺序来生成索引,这样对于 0 到 0.1 它是第一个 (10%),0.1 到 0.3 它是第二个 (0.3 - 0.1 将覆盖 20%)等等。
【讨论】: