优化这种方法的方法不是找出更快的方式来生成排列,而是生成尽可能少的排列。

首先,如果您只想要按排序顺序的组合,您将如何做到这一点?

您不需要生成0到100的所有可能组合,然后对其进行过滤。第一个数字a可以是0到100之间的b任何数字。第二个数字可以是0到(100-a)之间的任何值。第三个数字,c只能是100-ab。所以:for a in range(0, 101):

for b in range(0, 101-a):

c = 100-a-b

yield a, b, c

现在,而不是产生100*100*100组合过滤下来到100*50*1+1,我们只是生成100*50*1+1,为2000X加速。

但是,请记住,仍有X * (X/2)**N答案。因此,X * (X/2)**N及时计算它们而不是X**N最佳 - 但它仍然是指数时间。而且没有办法解决这个问题; 毕竟,你想要一个指数的结果。

你可以寻找方法让第一部分itertools.product与reduceor 结合起来更简洁accumulate,但我认为它最终会降低可读性,并且你希望能够扩展到任意任意N,并且还能得到所有的排列,而不仅仅是排序的。所以,在你这样做之前保持它是可以理解的,然后在你完成之后寻找方法来压缩它。

你显然需要经历N步骤。我认为使用递归比循环更容易理解。

当n为1时,唯一的组合是(x,)。

否则,对于从0到x的每个值a,您可以将该值与总和为xa的n-1个数的所有组合一起使用。所以:def sum_to_x(x, n):

if n == 1:

yield (x,)

return

for a in range(x+1):

for result in sum_to_x(x-a, n-1):

yield (a, *result)

现在你只需要添加排列,你就完成了:def perm_sum_to_x(x, n):

for combi in sum_to_x(x, n):

yield from itertools.permutations(combi)

但是有一个问题:permutations置换位置,而不是价值。所以,如果你有,比如说(100, 0, 0),那六个排列是(100, 0, 0),(100, 0, 0),(0, 100, 0),(0, 0, 100),(0, 100, 0),(0, 0, 100)。

如果N非常小 - 就像在你的例子中那样,N = 3且X = 100-可以很好地生成每个组合的所有6个排列并过滤它们:def perm_sum_to_x(x, n):

for combi in sum_to_x(x, n):

yield from set(itertools.permutations(combi))

......但如果N能够变大,我们也会在那里谈论很多浪费的工作。

这里有很多关于如何在没有重复值的情况下进行排列的好答案。例如,请参阅此问题。借用该答案的实现:def perm_sum_to_x(x, n):

for combi in sum_to_x(x, n):

yield from unique_permutations(combi)def perm_sum_to_x(x, n):

for combi in sum_to_x(x, n):

yield from sympy.multiset_permutations(combi)

def perm_sum_to_x(x, n):

for combi in sum_to_x(x, n):

yield from more_itertools.distinct_permutations(combi)

python编写程序计算1+2+3+......+100和_Python3:计算两个列表总和为100的所有排列的最有效方法是什么?...相关推荐

  1. 编写python程序、计算账户余额_小明有20w存款存在余额宝中,按余额宝年收益为3.35%计算,用Python编写程序计算,多少年后小明的存款达到30w?...

    [判断题]卤素灯泡是在灯泡内充入氟.氯等卤素气体. [单选题]我国刑法第12条关于溯及力的规定采取的是( ). [填空题]本地局域网 LAN 内, () 和无绳电话速率较低,主流带宽是 100kbps ...

  2. [python]编写程序产生 ISBN 号的校验位。

    @MADE BY YWL_XJTU python编写程序产生 ISBN 号的校验位. 编写程序产生 ISBN 号的校验位.任何新出版的图书都配有 ISBN 号, 2007 年以前是由 10 位数字加上 ...

  3. java编写一个程序_计算已知长和宽的长方形的周长,请教一下大佬们,我们java留了一个作业,编写程序,定义一个接口Comput,声明计算周长和面积的方法...

    //编写程序,定义一个接口Compute,声明计算周长calgirth()和面积calarea ()的方法,然后定义一个长方形类RRect和圆类Circle,两个类都实现接口Compute,最后进行测 ...

  4. java语言编程三角形图形_编程题:编写程序输入三角形的3条边长,计算并输出... 求助一道JAVA编程题:编写一个类似记事本的图形用......

    导航:网站首页 > 编程题:编写程序输入三角形的3条边长,计算并输出... 求助一道JAVA编程题:编写一个类似记事本的图形用... 编程题:编写程序输入三角形的3条边长,计算并输出... 求助 ...

  5. 编写程序,输入百分制成绩,输出其对应的成绩等级。90~100分对应A等, 80~89对应B等,70~79对应C等,60~69对应D等,0~59对应E等。

    编写程序,输入百分制成绩,输出其对应的成绩等级.90~100分对应A等, 80~89对应B等,70~79对应C等,60~69对应D等,0~59对应E等. #include<stdio.h> ...

  6. python编写程序公式计算s_PYTHON程序设计实验2

    安徽工程大学 Python程序设计 实验报告 班级  物流191   姓名邹缕学号3190505117 成绩 日期     2020.3.22      指导老师修宇 实验二 顺序结构程序设计(验证性 ...

  7. python编写程序 计算1_《Python程序设计》——第1章 计算与问题求解简介 1.1 计算与Python简介-阿里云开发者社区...

    本节书摘来自华章计算机<Python程序设计>一书中的第1章,第1.1节,作者:[美]戴维 I.施奈德(David I. Schneider)著,更多章节内容可以访问云栖社区"华 ...

  8. 怎么用python编写程序计算标准差_自学生信Python(第五天)|如何计算标准差?...

    如何计算标准差? 本人是一枚生物学的学生,由于对生物信息学特别感兴趣,于是想自学生物信息学(新手莫怪).了解到生物信息学要有编程基础,尤其是要会一门编程语言,例如:R语言.Python.Perl等,还 ...

  9. python编写程序,输出100以内的所有素数

    编写程序,输出100以内的所有素数 超简洁 代码 for i in range(2,100):for j in range(2,i):if i%j==0:breakelse:print(i) 运行结果

最新文章

  1. 11岁少女叫板支付宝!会写代码的孩子,到底多可怕?
  2. php桶排序,PHP实现桶排序算法
  3. 2017c语言考核册答案,2017年最新C语言考题带答案
  4. VTK:图表之SelectedVerticesAndEdgesObserver
  5. 【详细注释】1058 选择题 (20 分)
  6. markDown 语法(个人练习篇)
  7. 跨语言调用Hangfire定时作业服务
  8. Android Studio 编译失败 Could not read entry ':app:processDebugManifest' from cache taskArtifacts.bin
  9. 达梦数据库SQL语法
  10. [SpringBoot]下载excel模板,postman测试接口
  11. React脚手架项目示例
  12. 数据库表设计:一对一、一对多、多对多
  13. centos 7.6编译安装nginx
  14. 骇客基础知识:第3部分
  15. 猫眼CEO郑志昊:为什么说产品思维已“死”?
  16. 如何让血管“返老还童”
  17. 程序猿怎么利用技术挣钱?——python量化实践
  18. 【最优化方法】1-最优化方法介绍
  19. 有一个8位机,采用单总线结构......(计算机组成原理课后习题)
  20. MFC中如何给控件关联变量

热门文章

  1. 让我们Core在一起:ASP.NET Core amp; .NET Core
  2. 用ajax连接mysql_页面用ajax实现简单的连接数据库
  3. [转]解决Android studio升级到3.5的一些问题
  4. 【ArcGIS风暴】ArcGIS 10.2导入Excel数据X、Y坐标(经纬度、平面坐标),生成Shapefile点数据图层
  5. C#将dataGridView中显示的数据导出到Excel(大数据量超实用版)
  6. Bit Manipulation —— 位运算
  7. 用计算机算出你喜欢吃你喜欢的人,Go for it七年级下学期1-12单元(期末复习)句子翻译专练...
  8. 同一个工作组无法查看计算机,win7系统在同一个工作组看不到其他电脑的解决方法...
  9. 服务器的响应一直一直发送不过去,zeroRPC:在发送响应后继续运行进程
  10. 2000多一件的大牌T恤,真实成本有多少?