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

问题描述

我试图将一个列表分成 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