【问题标题】:Saving one proportion of a list in one varaible and the other in another using iter()使用 iter() 将列表的一部分保存在一个变量中,另一部分保存在另一个变量中
【发布时间】:2021-06-22 10:34:41
【问题描述】:

我正在尝试将一个列表拆分为 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']]

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

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

【问题讨论】:

  • 如果你这样做会怎样:lists=[[next(it) for _ in range(size)] for size in sizes] variable1= lists[0] variable2=lists[1]
  • 我尝试了这个初始化并且我得到了这个错误“文件“main.py”,第 66 行,在 列表 = [[next(itA) for _ in range(size)] for size大小] StopIteration"
  • 如果你不介意,你能分享整个代码吗?

标签: python list iterator


【解决方案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', '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的列表b['1', '1', '0', '1', '0']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    相关资源
    最近更新 更多