假设我有3个不同的项目A
,B
和C
。我想创建一个合并列表,其中包含NA
A
份NB
份B
份NC
份C
份 {strong>随机订单。所以结果应该是这样的:
finalList = [A, C, A, A, B, C, A, C,...]
是否有一种干净的方法可以使用np.random.rand
以Python语言解决这个问题?如果没有,除numpy
以外的任何其他套餐?
答案 0 :(得分:3)
我认为你不需要那么笨拙。您可以使用random
内置程序包:
import random
na = nb = nc = 5
l = ['A'] * na + ['B'] *nb + ['C'] * nc
random.shuffle(l)
列表l
将类似于:
['A', 'C', 'A', 'B', 'C', 'A', 'C', 'B', 'B', 'B', 'A', 'C', 'B', 'C', 'A']
答案 1 :(得分:3)
您可以定义元组列表。每个元组应包含一个字符和所需的频率。然后你可以创建一个列表,其中每个元素以指定的频率重复,最后使用random.shuffle
>>> import random
>>> l = [('A',3),('B',5),('C',10)]
>>> a = [val for val, freq in l for i in range(freq)]
>>> random.shuffle(a)
>>> ['A', 'B', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'A', 'C', 'B', 'C']
答案 2 :(得分:2)
是的,这很可能(而且很简单)有numpy。您必须使用您的唯一元素创建一个数组,使用np.repeat
使用axis
参数重复每个元素指定的次数,然后使用{{1 }}
以下是np.random.shuffle
为NA
,1
为NB
,2
为NC
的示例。
3
a = np.array([['A', 'B', 'C']]).repeat([1, 2, 3], axis=1).squeeze()
np.random.shuffle(a)
请注意,使用numpy(指定唯一元素和重复数组)比使用大量独特元素重复的纯python实现更简单。