python循环for不从零开始_Python-多处理-巨大的for循环

下午好,

我对Python还是很陌生,我必须解决一个需要尝试数十亿个假设的问题...更具体地说,我需要迭代440个元素的列表,但我需要这样做8次...(是的,我知道OS迭代的次数完全是疯狂的。

我的机器相当不错,所以我想使用多处理python功能来加快速度。

您是否知道任何简单的解决方案可以从我的机器的处理能力中获利?

输入:

配对对:

for ind1 in range(16,37):

for ind2 in range(16,37):

ListPairsAux = []

ListPairsAux.append(ind1)

ListPairsAux.append(ind2)

ListPairs.append(ListPairsAux)

为了简化问题,您可以假设len(list1 [i])和len(list2 [i])都是整数,并且都等于198。(在实际问题中,我们实际上有21个不同的整数,但是都以相同的顺序排列-这意味着它们不会超出198。

for循环如下:

for first in ListPairs:

print(str(first))

for second in ListPairs:

for third in ListPairs:

for fourth in ListPairs:

for fifth in ListPairs:

for sixth in ListPairs:

for seventh in ListPairs:

sumA = first[0] + second[0] + third[0] + fourth[0] + fifth[0] + sixth[0] + seventh[0]

sumB = first[1] + second[1] + third[1] + fourth[1] + fifth[1] + sixth[1] + seventh[1]

for i in range(len(list1)):

if sumA == len(list1[i]) and sumB == len(list2[i]):

List7 = []

List7 = [first, second, third, fourth, fifth, sixth, seventh]

ListsOut[i].append(List7)

for eighth in ListPairs:

sumA = first[0] + second[0] + third[0] + fourth[0] + fifth[0] + sixth[0] + seventh[0] + eighth[0]

sumB = first[1] + second[1] + third[1] + fourth[1] + fifth[1] + sixth[1] + seventh[1] + eighth[1]

for i in range(len(list1)):

if sumA == len(list1[i]) and sumB == len(list2[i]):

List8 = []

List8 = [first, second, third, fourth, fifth, sixth, seventh, eighth]

ListsOut[i].append(List8)

非常感谢!

解决方案

您发布的解决方案可能永远不会完成,因为它将需要经历超过10 ^ 21个元素的组合。与其使用多重处理,不如使用更快的算法。

使用您在问题中使用的list1,list2和lists_out,我们正在寻找组合16和36之间的整数的方法,以使它们求和成为list1和list2中序列的长度。组合应为[16,36]范围内的7或8个整数。

import itertools

def so43965562(list1, list2, lists_out, lower=16, upper=36):

assert len(list1) == len(list2) == len(lists_out)

for n in (7, 8):

for i in range(len(list1)):

# Find all combinations of n numbers in [lower, upper]

# that sum to len(list1[i])

combs1 = combinations_summing_to(lower, upper, n, len(list1[i]))

# Find all combinations of n numbers in [lower, upper]

# that sum to len(list2[i])

combs2 = combinations_summing_to(lower, upper, n, len(list2[i]))

for t1, t2 in itertools.product(combs1, combs2):

result = [(v1, v2) for v1, v2 in zip(t1, t2)]

lists_out[i].append(result)

以下函数写s为和n之间的整数之l和u。

def combinations_summing_to(l, u, n, s, suffix=()):

"""In which ways can s be written as the sum of n integers in [l, u]?

>>> # Write 2 as a sum of 4 integers between 0 and 5.

>>> print(list(combinations_summing_to(0, 5, 4, 2)))

[(0, 0, 0, 2), (0, 0, 1, 1)]

>>> # Write 5 as a sum of 3 integers between 0 and 5.

>>> print(list(combinations_summing_to(0, 5, 3, 5)))

[(0, 0, 5), (0, 1, 4), (0, 2, 3), (1, 1, 3), (1, 2, 2)]

>>> # Write 12 as a sum of 3 integers between 0 and 5.

>>> print(list(combinations_summing_to(0, 5, 3, 12)))

[(2, 5, 5), (3, 4, 5), (4, 4, 4)]

>>> # Write 34 as a sum of 2 integers between 16 and 36.

>>> print(list(combinations_summing_to(16, 36, 2, 34)))

[(16, 18), (17, 17)]

"""

if n == 0:

return (suffix,) if s == 0 else ()

elif n == 1:

return ((s,) + suffix,) if l <= s <= u else ()

else:

return itertools.chain.from_iterable(

# Combinations summing to s where the last element is k

combinations_summing_to(l, k, n - 1, s - k, (k,) + suffix)

for k in range(u, l-1, -1)

# Early bailout if you can't make s with all elements <= k

if l * n <= s <= k * n)

您可以按以下方式运行解决方案:

lists_out = [[]]

so43965562(list1=[[0]*(7*16+1)], list2=[[0]*(7*16+2)], lists_out=lists_out)

for result in lists_out[0]:

print(result)

# Outputs the following two combinations:

# [(16, 16), (16, 16), (16, 16), (16, 16), (16, 16), (16, 16), (17, 18)]

# [(16, 16), (16, 16), (16, 16), (16, 16), (16, 16), (16, 17), (17, 17)]

lists_out = [[]]

n = 133

so43965562(list1=[[0]*n], list2=[[0]*n], lists_out=lists_out)

print(len(lists_out[0]))

# Outputs 1795769, takes about 2.5 seconds to run.

请注意,输出大小呈指数增长,当n = 7 * 16 = 112时从零开始,因此当您编写问题时,当n = 198时,计算所有组合仍将花费很长时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bridge Across Islands POJ - 3608 凸多边形间最小距离/旋转卡壳

旋转的部分始终感觉有点别扭。。后来发现是因为叉积顺序为负。。 所以让三角形面积逐渐变大实际上就是让三角形面积变小&#xff08;绝对值意义上的&#xff09;&#xff0c;这样就是让高变小了。。 至于为什么要选最下和最上。。应该是为了满足两条线始终可以生成所有多边形间…

绑定到JSON和XML –处理集合

EclipseLink JAXB&#xff08;MOXy&#xff09;的优势之一是能够通过一组元数据将对象模型映射到JSON和XML。 一个弱点是您需要在JSON键或XML元素上折衷集合属性。 我很高兴地说这个问题已经在EclipseLink 2.5&#xff08;和EclipseLink 2.4.2&#xff09;中得到解决&#xff0…

【WIP】Bootstrap 基础

创建: 2017/09/28 更新: 2017/10/14 标题加上【WIP】转载于:https://www.cnblogs.com/lancgg/p/8281714.html

xml mysql 模糊查询_mybatis+Spring mysql的模糊查询问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼查询的mapping.xml语法resultType"java.lang.Integer">SELECTcount(yy_id)FROMmc_usersystem_version like CONCAT(%,${system_version },% )比如当我为字段 system_version 赋值为 ”3512“ 的时候 能查询出来若是我…

css 浮动和清除浮动

在写页面布局的过程中&#xff0c;浮动是大家经常用的属性。在好多的排版布局中都是用的的浮动比如说下面这些地方都是应用到了浮动。 在我学习浮动的时候可是熬坏了脑筋&#xff0c;在这里我分享一下我对浮动这块知识的总结。 一、浮动的定义 使元素脱离文档流&#xff0c;按…

Java Code Geeks和Packt提供的Hadoop书籍赠品

亲爱的极客&#xff0c;由于参与度很高&#xff0c;并且为了有机会赢得尽可能多的Hadoop粉丝&#xff0c;我们决定将竞赛延长一个星期&#xff0c;直到下周二。 各位极客&#xff0c; 赠品在Java Code Geeks上继续。 我们很高兴地宣布&#xff0c;我们再次与Packt Publishin…

【转】 差分约束系统详解(转化为最短路) (概念)

---恢复内容开始--- 转自&#xff1a;http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 差分约束系统中&#xff1a; 如果求未知数的最大值&#xff0c;那么按小于等于建图后求最短路即可。&#xff08;因为求最短路是由无穷向下约束而得到的&#xff0c;所以得到…

jq实现点击某元素之外触发事件

1 $(document).bind("click",function(e){ 2 var target $(e.target); 3 if(target.closest("#parentId").length 0){//点击id为parentId之外的地方触发 4 layer.close(tip_index); 5 type0; 6 } 7 }) …

mysql数据库连接时区设置_springboot 连接数据库之时区设置

抽空查看以前的开发日志&#xff0c;发现了一些“问题”日志&#xff0c;决定整理后陆陆续续发出来吧&#xff0c;也为有需要的话小伙伴提供点帮助。在springboot启动之时&#xff0c;报错了&#xff0c;一看应该就是连接MySql数据库时出的问题。create connection SQLExceptio…

【HTML基础】表格和表单

本次博客的主要内容如下&#xff1a; meta和link表格表单 meta和link meta meta的属性有两种&#xff1a;name和http-equiv。 name属性主要用于描述网页内容&#xff0c;对应与网页内容。 1.关键字&#xff0c;当搜索引擎在爬取内容的时候&#xff0c;会根据关键字判断&a…

定义EJB 3.1视图(本地,远程,无接口)

这篇文章将讨论使用批注定义EJB视图的可能方法&#xff08;最后我将只提到使用EJB部署描述符&#xff09;。我将重点介绍最新的EJB 3.1视图&#xff0c;这些视图将省略旧的本地&#xff0c;远程和本地接口。 因此&#xff0c;我们可以选择&#xff1a; 远程业务界面视图&#…

小鱼的数字游戏

题目描述 小鱼最近被要求参加一个数字游戏&#xff0c;要求它把看到的一串数字&#xff08;长度不一定&#xff0c;以0结束&#xff0c;最多不超过100个&#xff0c;数字不超过2^32-1&#xff09;&#xff0c;记住了然后反着念出来(表示结束的数字0就不要念出来了)。这对小鱼的…

iview给radio按钮组件加点击事件

<RadioGroup v-model"formValidate.phone"><Radio label"phone">商家电话</Radio><Radio label"leaderPhone">负责人电话</Radio><span click"inputPhone()"><Radio label"newPhone"…

python json 不好用_Python之json使用

一、概念json是一种通用的数据类型&#xff0c;任何语言都认识接口返回的数据类型都是json长得像字典&#xff0c;形式也是k-v { }其实json是字符串字符串不能用key、value来取值&#xff0c;要先转成字典才可以格式如下&#xff1a;{"error_code": 0,#要使用双引号&…

jstack命令(Java Stack Trace)

转&#xff1a;http://blog.csdn.net/fenglibing/article/details/6411940 JDK内置工具使用 一、javah命令(C Header and Stub File Generator) 二、jps命令(Java Virtual Machine Process Status Tool) 三、jstack命令(Java Stack Trace) 四、jstat命令(Java Virtual Machine …

EJB继承与Java继承不同

尽管EJB继承有时使用Java继承&#xff0c;但它们并不总是相同的。 就像您在我以前的文章中可以读到的那样 &#xff0c;EJB不必实现任何接口即可公开业务接口。 另一种方法也是正确的-仅仅是因为EJB实现了某个接口或扩展了其他EJB并不意味着它公开了全部或任何视图。 假设我们…

信号量

信号量Semaphore初探 1.信号量(Semaphore)简述 信号量Semaphore是java.util.concurrent包下一个常用的同步工具类,他维护了一个许可集,可以理解成资源数,可以通过aquire操作来获取一个资源, 并通过release来释放一个资源,但需要注意的是,release来释放资源前不一定要先通过acqu…

(2017.9.27) 自定义列表项 list-style 使用心得

今天给某公司做招聘专页。早上完成设计图&#xff0c;下午开始排版。页面套用了我之前做的某人才局的招聘页面&#xff0c;导航栏、banner 很快就出来了。这次内容里我有些地方用了列表&#xff0c;当然要用 <ul> <li> 标签。列表项&#xff08;小圆点&#xff09;…

链式存储mysql_链栈:栈的链式存储结构

前面讲完了栈的顺序存储结构&#xff0c;我们现在来看看栈的链式存储结构&#xff0c;简称为链栈。链栈是没有附加头结点的运算受限的单链表。栈顶指针就是链表的头指针。栈是用栈顶来做插入和删除操作&#xff0c;那么对于链栈的栈顶放在链表的头部还是尾部呢&#xff1f;单链…

树状数组 学习笔记

树状数组可以用来求区间元素的和。与前缀和做法不同&#xff0c;它支持值的修改。比如说&#xff0c;现在我有一个数列a&#xff0c;要求你维护这个数列&#xff0c;使其支持两个操作。1.改变数列第k项的值2.查询从第i项到第j项的总值暴力做法总是过不了所有点的&#xff0c;如…