生成每个可能的整数间隔

时间:2019-02-26 10:23:03

标签: python python-3.x list integer intervals

尽管进行了研究,但仍未找到解决方案。谢谢您的帮助!

让a和b为两个整数。无论这两个整数之间的长度如何,我都希望生成所有整数的子间隔。

例如,让a = 2和b = 5,我尝试获得的结果是:

[
 [[2],[3],[4],[5]
 [[2,5]],
 [[2],[3,5]],
 [[2],[3,4],[5]],
 [[2],[3],[4,5]],
 [[2,3],[4,5]],
 [[2,3],[4],[5]],
 [[2,4],[5]]
]

谢谢您的帮助,

最诚挚的问候!

2 个答案:

答案 0 :(得分:3)

您可以使用一个函数,该函数产生最接近a(本身为a的数字到b的间隔,然后递归产生a + 1b

def intervals(a, b):
    if a > b:
        yield []
    for i in range(a, b + 1):
        for interval in intervals(i + 1, b):
            yield [[a] if a == i else [a, i], *interval]

这样:

list(intervals(2, 5))

返回:

[[[2], [3], [4], [5]],
 [[2], [3], [4, 5]],
 [[2], [3, 4], [5]],
 [[2], [3, 5]],
 [[2, 3], [4], [5]],
 [[2, 3], [4, 5]],
 [[2, 4], [5]],
 [[2, 5]]]

答案 1 :(得分:1)

我写了一个方法来完成您所要求的。看起来不是很美丽,但是确实可以。

def subIntervals(a,b):
    outputList = [[[a]]]
    for n in range(a+1, b+1):
        newOutputList = []
        for e in outputList:
            newOutputList.append(e + [[n]])
            newOutputList.append(e[:-1] + [[e[-1][0], n]])
        outputList = newOutputList
    return outputList

如果需要,我会添加一个解释。