Pomimo moich badań, nie znalazłem rozwiązania mojego problemu. Dziękujemy za pomoc!

Niech a i b, dwie liczby całkowite. Chcę wygenerować wszystkie substancje liczb całkowitych bez względu na ich długości między tym dwoma liczbami całkowitymi.

Na przykład pozwala A = 2 i B = 5, wynik, który próbowałem uzyskać, to:

[
 [[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]]
]

Dziękuję za pomoc

Z poważaniem !

3
Guillaume 26 luty 2019, 13:23

2 odpowiedzi

Najlepsza odpowiedź

Możesz użyć funkcji, która daje interwały z liczb najbliżej a (sama a) do b, a następnie rekurencyjnie daje interwały z a + 1 do a + 1 do a + 1 }}:

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]

Po to aby:

list(intervals(2, 5))

Zwroty:

[[[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]]]
3
blhsing 26 luty 2019, 10:48

Napisałem metodę, o co prosiłeś. Nie jest zbyt piękne, aby spojrzeć, ale to praca.

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

W razie potrzeby dodam wyjaśnienie.

1
markuscosinus 26 luty 2019, 10:55