首页 > 解决方案 > 使用 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', '0', '0', '0', '1', '1', '1', '1', '1', '0', '0', '1', '0', '0', '1', '1'], ['1', '1', '1']]

但是我想知道如何将列表一对一的列表变量保存到另一个列表变量。

任何建议都非常感谢!谢谢

标签: pythonlistiterator

解决方案


我解决了这个问题,但不幸的是,不是用迭代器。这是我的解决方案

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', '0', '1', '1', '1', '1', '1', '1 '、'1'、'0'、'0'、'1'、'1'、'0'、'1'、'0']

列出大小为 -15['0','1', '0', '1', '0', '0', '1', '1', '1', '1', '1' , '1', '1', '0', '0']

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


推荐阅读