python - 使用 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']]
但是我想知道如何将列表一对一的列表变量保存到另一个列表变量。
任何建议都非常感谢!谢谢
解决方案
我解决了这个问题,但不幸的是,不是用迭代器。这是我的解决方案
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
推荐阅读
- javascript - 回调没有像预期的那样被调用多次
- xml - 如何使用 xpath (1.0) 迭代/选择元素对?
- python - 如何正确找到并关闭那些未正确关闭的json
- python - 将重复的行值重塑为列 - python
- node.js - 我们可以使用 Apache Server 进行 Angular Web 应用程序的服务器端渲染,还是必须坚持使用 NodeJs
- javascript - 为什么我的导航栏会干扰我的 Stripe 令牌创建?
- yii2 - Yii2:使用 ActiveDataProvider 在索引页面的 url 中显示 GET 参数
- swift - 调出键盘时会自动更改滚动插图
- python - 为什么“await client.say()”在我的代码中不起作用?
- jsrender - JSViews array.length 更新不正确