相关疑难解决方法(0)

在Python中生成所有可能的长度为N的列表,这些列表总和为S.

我正在尝试生成所有可能的长度N的列表,总和为S.我已经编写了一些代码来执行此操作,但是在任何大的(特别是,我希望N = 5,S = 100),我遇到了内存溢出错误.

我正在寻找一个更好的问题解决方案,或者一种改进我的代码的方法,以便我可以在N = 5,S = 100上运行它.下面这两个程序协同工作,在嵌套列表中创建所有可能的数字组合,然后将它们重新设置为正确的格式.下面再现了一些样本输出.

我知道我的代码不是最好的.我是一名工程师(我知道,我知道),所以编码并不完全是我的专长.我感谢您提供的任何帮助.

编辑:我只是想澄清一些事情.首先,列表中的零可以,列表可以包含相同数字的倍数,列表中数字的顺序很重要.

def nToSum(N,S):
    ''' Creates a nested list of all possible lists of length N that sum to S'''
    if N <= 1: #base case
        return [S]
    else:
        L = []
        for x in range(S+1):   #create a sub-list for each possible entry of 0 to S 
            L += [[x,nToSum(N-1,S-x)]]  #create a sub-list for this value recursively
        return L

def compress(n=[],L): #designed to take in a list generated by nToSum …
Run Code Online (Sandbox Code Playgroud)

python recursion sum list

4
推荐指数
1
解决办法
2830
查看次数

标签 统计

list ×1

python ×1

recursion ×1

sum ×1