Python: 如何随机混合两个列表?

Python: How do I randomly mix two lists?

如果我生成两个随机列表,例如:

N=5
X=20

parent1 = np.random.choice(X, N, replace=True)
parent2 = np.random.choice(X, N, replace=True)

会给出两个列表,例如:

[2,5,1,1,12]
[3,18,4,5,1]

我怎样才能创建一个新列表,它是两个具有相同数量数字的列表的随机组合?

例如

[2,18,1,5,12]

[18,5,1,12,5]

顺序无关紧要

从 2 个列表中进行均匀随机选择的几种方法。

  • 随机选择列表中的0或1,然后在列表中随机选择。
  • 随机数直到列表的总和,然后根据该数字从第一个或第二个列表中逻辑选择。

.

import random
#### Option 1
for i in range(len(parent1)):
   list_number = random.randint(1,3)
   output(i) = exec('np.random.choice(parent'+str(list_number)+')')

#### Option 2
output_list = np.random.choice(np.concatenate([parent1,parent2]), N, replace=False)

前者在输出中平等地表示每个列表,而不管它们的相对长度,后者根据列表的相对长度进行采样。

继续你的例子,你可以简单地试试这个:

result = np.random.choice(np.concatenate([parent1,parent2]), N, replace=False)

是否进行替换采样由您选择(参数replace)。

如果给你 parent1parent2,你可以使用 np.choose:

which_one = np.random.int(2, size=N).astype(np.bool)
out_array = np.choose(which_one, [parent1, parent2])

但是,请记住,如果 parent1parent2 在您的代码中都是随机的,那么您可以简单地执行

out_array = np.random.choice(X, N, replace=True)

一种方法是:

N=5
select_one = np.random.randint(0,2,N) # Outputs an array of 1 or 0s
mixed_list = select_one*parent1 + (1 - select_one)*parent2   

如果你也想随机排列列表元素,你可以使用:

mixed_list = np.random.permutation(rand_fact*parent1 + (1 - rand_fact)*parent2)