Вы можете использовать функцию, которая возвращает интервалы от чисел, ближайших к 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]]]