生成每个可能的整数区间
Generate every possible intervals of integers
尽管我进行了研究,但我没有找到解决问题的办法。感谢您的帮助!
设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]]
]
感谢您的帮助,
此致!
我写了一个方法来完成你的要求。看起来不是很漂亮,但它完成了工作。
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
如果需要我会添加解释。
您可以使用函数生成从最接近 a
的数字(即 a
本身)到 b
的区间,然后递归地生成从 [=16= 的区间] 到 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))
returns:
[[[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]]]
尽管我进行了研究,但我没有找到解决问题的办法。感谢您的帮助!
设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]]
]
感谢您的帮助,
此致!
我写了一个方法来完成你的要求。看起来不是很漂亮,但它完成了工作。
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
如果需要我会添加解释。
您可以使用函数生成从最接近 a
的数字(即 a
本身)到 b
的区间,然后递归地生成从 [=16= 的区间] 到 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))
returns:
[[[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]]]