Python: случайно смешать два списка

У меня возникли проблемы при смешивании двух списков, чтобы создать новый список одинаковой длины.

До сих пор я случайно выбрал два списка из группы списков, названных 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],

У кого-нибудь есть идеи?

(контекст - два набора генов, которые размножаются, чтобы сформировать ребенка со смесью генов родителей)

1 ответ

Решение

Ты можешь использовать random.shuffle после объединения parent_1 а также parent_2 и выберите ломтик той же длины, что и 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])
Другие вопросы по тегам