有长度不同的两个列表,交换变形
parent1= [7,5,8,6,4,3,2,1,9]
parent2=[5,4,6,9,2,1,7]
第一步:在parent1,parent2上,随机抽取各自的子列表,相同位置,相同长度。(长度可变,位置可变),例如:
#长度为3,在原列表位置是[1,3]
map1=[5,8,6] #点位是[1,3]
map2=[4,6,9] #点位是[1,3]
#长度为4,在原列表位置是[1,4]
map1=[5,8,6,4] #点位是[1,4]
map2=[4,6,9,2] #点位是[1,4]
第二步:将提取的子列表插入到对方列表中(以长度3为例):
map1=[5,8,6] #点位是[1,3],替换parent2里相同点位的[4,6,9],得到child1
parent2=[5,4,6,9,2,1,7]
child1=[5,5,8,6,2,1,7] #保持原来长度
map2=[4,6,9] #按照点位[1,3],插入到parent1,得到child2
parent1=[1,2,3,4,5,6,7,8]
child2=[1,4,6,9,5,6,7,8] #保持原来长度
第三步:去掉child重复元素,且保持parent列表中元素的先后顺序;
#example1
map1=[5,8,6]
parent2=[5,4,6,9,2,1,7] #保护[5,8,6] 不变
child1=[5,5,8,6,2,1,7] #去重。第零个元素[5]的备选替换元素有:parent2中的[4],[9]
new_chid1=[9,5,8,6,2,1,7] #这个不可以,因为parent2中 [9] 在 [5] 的后面
new_chid1=[4,5,8,6,2,1,7] #这个可以,因为parent2中 [4] 在 [5] 的前面
#example2
map2=[4,6,9]
parent1=[1,2,3,4,5,6,7,8] #保护[[4,6,9] 不变
child2=[1,4,6,9,5,6,7,8] #去重。第五个元素[6]的备选替换元素有:parent1中的[2],[3]
new_chid2=[1,4,6,9,5,2,7,8] #这个可以,因为parent2中 [2] 在 [7] 的前面
new_chid2=[1,4,6,9,5,3,7,8] #这个可以,因为parent2中 [3] 在 [7] 的前面
第四步:随机保留一个 new_chid2 就可以,输出new_chid1,new_chid2