使用iter()将列表的一个部分保存在一个可变变量中,另一个保存在另一个可变对象中



我正试图将一个列表拆分为两个列表,分成不均匀的拆分。我通过应用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','0','0','1','1'',1','1'、'0'、'0'、'1'、'0'、'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','1'、'0'、'1'、'1',1','1','1','0','0','1'、'1'、'0'、'1','0'、'0']

列出大小为-15的

大小为-5的列表b['1'、'1'、'0'、'1'和'0']

最新更新