有长度不同的两个列表,交换变形
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
parent1 = [7, 5, 8, 6, 4, 3, 2, 1, 9]
parent2 = [5, 4, 6, 9, 2, 1, 7]
start = 1 # 起点下标
len = 3 # 长度
# 抽取指定子列表
map1 = parent1[start:start+len]
map2 = parent2[start:start+len]
print('map1=', map1)
print('map2=', map2)
# 插入对方列表
child1 = parent1[:]
child2 = parent2[:]
child1[start:start+len] = map2
child2[start:start+len] = map1
print('child1=', child1)
print('child2=', child2)
# 去掉child重复元素,且保持parent列表中元素的先后顺序;
def unique(child, parent):
new_child = []
for i, num in enumerate(child):
if num not in new_child:
new_child.append(num)
else:
j = 0
while j <= i:
if parent[j] not in new_child:
new_child.append(parent[j])
break
j += 1
return new_child
new_child1 = unique(child1, parent1)
new_child2 = unique(child2, parent2)
print('new_child1:', new_child1)
print('new_child2:', new_child2)
这个运用随机数
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] 的前面
这部分的解释中,最后一行 new_chid1=[4,5,8,6,2,1,7] #这个可以,因为parent2中 [4] 在 [5] 的前面 ,4不是在5的后面吗?
想要的是最终生成一个函数吗?然后你自己输入参数
你的备选元素是如何决定出来的?