Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建一个函数,返回n位数和x的和。优化问题 所以这里什么都没有。。。 问题摘要:_Python_Python 3.x - Fatal编程技术网

Python 创建一个函数,返回n位数和x的和。优化问题 所以这里什么都没有。。。 问题摘要:

Python 创建一个函数,返回n位数和x的和。优化问题 所以这里什么都没有。。。 问题摘要:,python,python-3.x,Python,Python 3.x,我们希望生成三位数的所有数字,其中: 它们的数字之和等于10 它们的数字按递增顺序排列(数字可能有两个或两个以上相等的连续数字) 满足上述两个限制条件的数字是:118127136145226235244334 创建一个接收两个参数的函数: 数字和值 所需的数字位数 函数应输出一个包含三个值的数组:[1,2,3] 1-可能数量的总数 2-最小数量 3-最大数量 上述示例应为: find_all(10, 3) == [8, 118, 334] 如果我们只有一个可能的数字作为解决方案,它应该

我们希望生成三位数的所有数字,其中:

  • 它们的数字之和等于10
  • 它们的数字按递增顺序排列(数字可能有两个或两个以上相等的连续数字)
满足上述两个限制条件的数字是:118127136145226235244334

创建一个接收两个参数的函数:

  • 数字和值
  • 所需的数字位数
函数应输出一个包含三个值的数组:[1,2,3]

1-可能数量的总数

2-最小数量

3-最大数量

上述示例应为:

find_all(10, 3) == [8, 118, 334]
如果我们只有一个可能的数字作为解决方案,它应该输出如下结果:

find_all(27, 3) == [1, 999, 999]
我的第一个版本的代码
def find_all(sum_dig,digs):
#挖掘次数是否可以求和?
如果sum_dig>digs*9:
返回[]
数字_数组=[]
#eg生成1001000之间的num列表
对于范围内的i(10**(digs-1),10**digs):
数字之和=0
当前_编号=i
#求数和
对于范围内的x(digs):
数量总和+=当前数量%10
当前_编号/=10
it=iter('111122223333444455566666777788889999')
如果(number_sum==sum_dig)和all(其中c表示str(i)中的c):
数字\u数组。追加(i)
返回[len(数字数组),数字数组[0],数字数组[-1]]
只是一个例子
打印(find_all(10,3))返回[811834]
我在网上找到的程序的一部分,目前正在使用它。。。这对大量的人来说不太好

it=iter('111122223333444455566666777788889999')
全部(其中c为str(i)中的c)
这基本上和这个一样,但因为我是一个noob,我不知道哪个更快,所以我决定使用上面的一个

def是递增顺序(num,digs):
对于范围内的i(digs-1,0,-1):
如果str(num)[i]>=str(num)[i-1]:
持续
其他:
返回错误
返回真值
因此,我将感谢任何关于我应该如何加速我的程序的建议,或者如果我必须完全从头开始程序,那么请告诉我我需要使用/学习什么特别的东西

如果你能编辑我的代码,这将是最好的,因为我会从正确的代码中学到很多

多谢各位

编辑 我设法让它跑得快了30%左右。请帮我加快速度

def find_all(sum_dig,digs):
如果sum_dig>digs*9:
返回[]
数字_数组=[]
对于范围内的i(10**(digs-1),10**digs):
数字之和=0
当前_编号=i
最后一位=99
_增加=真吗
对于范围内的x(digs):

如果是最后一个数字,请重复并从中删除。请查看代码审查网站。也要研究如何给你的程序计时。你是对的,这是一个糟糕的任务算法。如果有人让你自己做,你真的会这样做吗?如果不是,为什么你的程序是这样写的?(这是一个指导原则,不是一个反问。)iter()相当复杂,我想知道我的is_increasing_order()函数是否更快。。。但我真的被卡住了(好的,我看到带有递增顺序函数的代码实际上快了7%。。仍在寻找如何提高代码速度的建议。为什么不使用内置的
sorted()
检查数字是否按排序顺序?
def check\u sorted:return str(i)=''。join(sorted(str(i)))
运行时间不到您的
增加订单次数的1/6()
在我的机器上运行函数请重复并从。请查看代码审阅网站。同时研究如何为程序计时。您正确地认为这是一个糟糕的任务算法。如果有人让您自己做,您真的会这样做吗?如果不是,为什么您的程序是这样编写的?(这是一个指导原则,不是一个反问。)iter()相当复杂,我想知道我的is_递增_order()函数是否更快……但我真的被卡住了(好的,我看到带有递增顺序函数的代码实际上快了7%。。仍在寻找如何提高代码速度的建议。为什么不使用内置的
sorted()
检查数字是否按排序顺序?
def check\u sorted:return str(i)=''。join(sorted(str(i)))
在我的机器上运行
增加订单()功能的时间不到1/6