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

2024-04-26 04:17:15 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有3个不同的项目是ABC。我想创建一个组合列表,包含NAA副本,NBB副本和NCC副本,按随机顺序排列。因此,结果应该如下所示:

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

np.random.randPythonically有没有一个干净的方法来解决这个问题?如果没有,除了numpy还有其他包吗?你知道吗


Tags: 项目方法numpy列表np副本randomnc
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']

我觉得你不需要numpy。您可以使用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']

是的,这是非常有可能的(和简单的)与numpy。您必须创建一个具有唯一元素的数组,使用np.repeat(使用axis参数使这成为可能)将每个元素重复指定的次数,然后使用np.random.shuffle洗牌。你知道吗

这里有一个例子,NA作为1NB作为2NC作为3。你知道吗

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

print(a)
array(['B', 'C', 'A', 'C', 'B', 'C'],
      dtype='<U1')

请注意,使用numpy(指定唯一元素和重复的数组)比使用纯python实现(当有大量唯一元素要重复时)更简单。你知道吗

相关问题 更多 >