从固定数量的项目创建随机订单的组合列表

时间:2018-01-14 06:49:19

标签: python random

假设我有3个不同的项目ABC。我想创建一个合并列表,其中包含NA ANBBNCC {strong>随机订单。所以结果应该是这样的:

finalList = [A, C, A, A, B, C, A, C,...]

是否有一种干净的方法可以使用np.random.rand以Python语言解决这个问题?如果没有,除numpy以外的任何其他套餐?

3 个答案:

答案 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.shuffleNA1NB2NC的示例。

3

a = np.array([['A', 'B', 'C']]).repeat([1, 2, 3], axis=1).squeeze()
np.random.shuffle(a)

请注意,使用numpy(指定唯一元素和重复数组)比使用大量独特元素重复的纯python实现更简单。