尽管进行了研究,但仍未找到解决方案。谢谢您的帮助!
让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]]
]
谢谢您的帮助,
最诚挚的问候!
答案 0 :(得分:3)
您可以使用一个函数,该函数产生最接近a
(本身为a
的数字到b
的间隔,然后递归产生a + 1
到b
:
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
如果需要,我会添加一个解释。