Python:如何计算给定数字的各个部分的组合,给出数字,列表长度,第一个和最后一个数字

佩特雷托

我对此很固执(可能是因为我是计算机编程的新手)。我从问题中得到以下代码:[ Python:找到给定数字部分的所有可能组合

def sum_to_n(n, size, limit=None):
    """Produce all lists of `size` positive integers in decreasing order
    that add up to `n`."""
    if size == 1:
        yield [n]
        return
    if limit is None:
        limit = n
    start = (n + size - 1) // size
    stop = min(limit, n - size + 1) + 1
    for i in range(start, stop):
        for tail in sum_to_n(n - i, size - 1, i):
            yield [i] + tail

for partition in sum_to_n(8, 3):
    print (partition)

[6, 1, 1]
[5, 2, 1]
[4, 3, 1]
[4, 2, 2]
[3, 3, 2]

它是否非常有用,但是我正在尝试对其进行修改以设置一些选项。假设我只希望结果中的第一个数字是4,最后一个数字是1。目前,我使用以下解决方案:

def sum_to_n(n,first, last, size, limit=None):
    if size == 1:
        yield [n]
        return
    if limit is None:
        limit = n
    start = (n + size - 1) // size
    stop = min(limit, n - size + 1) + 1
    for i in range(start, stop):
        if i <=first:
            for tail in sum_to_n(n - i,first,last, size - 1, i):
                ll=len(tail)
                if tail[ll-1]==last:
                    yield [i] + tail

for i in sum_to_n(8,4,1,3):
    if i[0]==4 and i[size-1]==1:
        print(i)
    if i[0]>4:
        break

[4,3,1]

但是使用较大的整数,该程序会做很多不必要的工作。例如,该for i in range(start, stop):计算计算列表的所有可能的第一个数字,而不是仅计算nedded的“ first”参数,如果没有该参数,该函数将不起作用。有人可以建议一个更好,更快的解决方案,以调用函数来提供所需的参数,以便仅具有所请求的计算?

米凯尔·鲁森(Mikael Rousson)

因为您知道第一个数字,所以您只需要解决最后一个数字。

在您的示例中,将给出类似以下内容:

for res in sum_to_n(n=8-4, last=1, size=3-1):
   print([4] + res)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档