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

时间:2018-11-22 02:00:41

标签: python python-3.x list random genetic-algorithm

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

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]

顺序无关紧要。

4 个答案:

答案 0 :(得分:4)

继续您的示例,您可以尝试以下操作:

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

是否选择更换样品是您的选择(参数replace)。

答案 1 :(得分:0)

从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)

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

答案 2 :(得分:0)

如果给定了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)

答案 3 :(得分:0)

一种方法是:

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)