Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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的和返回所有唯一的数字组合_Python - Fatal编程技术网

Python 如何以N的和返回所有唯一的数字组合

Python 如何以N的和返回所有唯一的数字组合,python,Python,我编辑了我的问题,因为我认为我解释得不好。当数字列表是随机的,但在我的情况下也能工作时,作为副本链接的子集和函数似乎是有效的。然而,对于像我下面的函数这样的大数来说,它似乎效率很低。我的问题是关于一个数字的列表,它总是基于N的值 如果N为10,则数字列表将为1到9或范围(1,N)。函数应返回从1到9的所有唯一数字组合,总和为10。在这种情况下,我下面的函数将解决这个问题并返回9,但是对于大的数字,这需要很长时间。在我看来,当数字的范围已知时,应该有更好的方法来解决这个问题,而不是必须迭代每个可能

我编辑了我的问题,因为我认为我解释得不好。当数字列表是随机的,但在我的情况下也能工作时,作为副本链接的子集和函数似乎是有效的。然而,对于像我下面的函数这样的大数来说,它似乎效率很低。我的问题是关于一个数字的列表,它总是基于N的值

如果N为10,则数字列表将为1到9或范围(1,N)。函数应返回从1到9的所有唯一数字组合,总和为10。在这种情况下,我下面的函数将解决这个问题并返回9,但是对于大的数字,这需要很长时间。在我看来,当数字的范围已知时,应该有更好的方法来解决这个问题,而不是必须迭代每个可能的组合。也许我错了

import itertools

def counter(n):
    count = 0
    l = range(1, n)
    for i in range(1, n):
        for c in itertools.combinations(l, i):
            if sum(c) == n:
                count += 1
    return count

你搜索的是配分函数p。 退房
它包含的递归公式仅在输入方面是线性的

5+3+2也是可能的,所以它会返回9。啊,谢谢!我认为该函数工作正常,但在我输入问题时,我想不出最后一种可能性。我的问题是如何更有效地计算解,而不必迭代每一个可能的组合。这是一个,虽然在你的例子中是有序的,但它仍然是一个NP完全问题,所以你不能用简单的公式来解决它。一位成员不辞辛劳地写出了解决这个问题的代码:计算一些,比如范围(10,20)内的n,然后将序列放入oeis。org@zwer看起来一点也不像子集和。