问题描述
我试图将一个列表分成 2 个列表,分成不均匀的部分。我通过应用 iter() 函数来实现这一点,如最后一行所示:
def crossover():
end = len(bestPop) - 1
for i in range(0,end,2):
crosspoint = (random.randint(1,len(range(stringLen - 2))))
crosspoint2 = stringLen - crosspoint
listA = pop[bestPop[i]]
listB = pop[bestPop[end - i]]
sizes = [crosspoint,crosspoint2]
it = iter(listA)
print([[next(it) for _ in range(size)] for size in sizes])
这会为 20 的总和创建一个随机比例(例如 17 和 3 & 6 和 14),以便拆分列表。这工作成功并打印出来:
[['1','0','1',' 0','1'],['1','1']]
但是我想知道如何将列表一对一地保存,并将两个列表保存到另一个。
非常感谢任何建议!谢谢
解决方法
我解决了这个问题,但不幸的是,没有使用迭代器。这是我的解决方案
def crossover():
end = len(bestPop) - 1
print("sdaasd" + str(bestPop))
for i in range(0,end,2):
crossPoint = (random.randint(1,len(range(stringLen - 2))))
crossPoint2 = stringLen - crossPoint
listA = pop[bestPop[i]]
listB = pop[bestPop[end - i]]
sizes = [crossPoint,crossPoint2]
parA1,parA2 = splitList(sizes,listA)
parB1,parB2 = splitList(sizes,listB)
childA = list(chain(parA1,parB2))
childB = list(chain(parB1,parA2))
pop.append(childA)
pop.append(childB)
def splitList(sizes,list):
par1 = []
par2 = []
for s in range(-division):
if s < sizes[0]:
par1.append(list[s])
else:
par2.append(list[s])
return par1,par2
输出:
父 B = ['0','1','0','0']
列出大小为 -15['0','0']
大小为 -5['1','0'] 的列表 b