Python:随机混合两个列表

Python: Randomly mix two lists

我在将两个列表混合在一起以制作相同长度的新列表时遇到了一些问题。

到目前为止,我从一堆名为 parent 1 和 parent 2 的列表中随机选择了两个列表。这是我目前所拥有的,但 output_list 行没有没用。

parent1 = listname[random.randint(1,popsize)]
parent2 = listname[random.randint(1,popsize)]
output_list = random.choice(concatenate([parent1,parent2]), length, replace=False)
print(output_list)

我想要的结果是: 如果 parent1 = [1,2,3,4,5]parent2 = [6,7,8,9,10] 那么可能的结果可能是 [1,2,3,9,10][1,7,2,5,6][1,2,7,4,5].

有人有什么想法吗?

(上下文是两组基因,它们繁殖形成 child 与 parents 基因的混合)

您可以在连接 parent_1parent_2 后使用 random.shuffle 并选择与 parent_1:

相同长度的切片
import random

parent_1 = [1,2,3,4,5]
parent_2 = [6,7,8,9,10]

c = parent_1 + parent_2
random.shuffle(c)

result = c[:len(parent_1)]
print(result) # [4, 5, 10, 6, 9]

构建遗传算法时,最好让父代的值在子数组中保持相同的索引,就像染色体中的基因一样。

您可以使用 numpy 执行此操作:

import numpy as np
male = np.random.choice(100, 5)   # array([25, 90, 25, 96, 91])
female = np.random.choice(100, 5) # array([98, 19, 17, 78, 29])
np.choose(np.random.choice(2, 5), [male, female])
# array([98, 19, 25, 96, 29])
np.choose(np.random.choice(2, 5), [male, female])
# array([25, 90, 25, 78, 29])