Мне нужно создать все комбинации списка, но каждый элемент имеет нижнюю и верхнюю границу (увеличивается с каждым di git на +2).
Например, при n = 4: все комбинации от [0, 1, 2, 3] (нижние границы) до [0, 2, 4, 6] (верхние границы) должны приводить к:
[[0, 1, 2, 3],
[0, 1, 2, 4],
[0, 1, 2, 5],
[0, 1, 2, 6],
[0, 1, 3, 4],
[0, 1, 3, 5],
[0, 1, 3, 6],
[0, 1, 4, 5],
[0, 1, 4, 6],
[0, 2, 3, 4],
[0, 2, 3, 5],
[0, 2, 3, 6],
[0, 2, 4, 5],
[0, 2, 4, 6]]
Прямое решение заключается в использовании itertools.combinations(range(2*n-1),n)
, а затем отфильтровывает все недействительные. Но это сначала создает множество недопустимых комбинаций, а затем еще больше замедляется фильтром, проходящим через все. В моем случае это слишком неэффективно для больших n.
Мне нужно решение, которое даже не пытается на l oop выше для каждого di git, чем возможно, и создает только комбинации в границах для каждого di git.
Я уверен, что есть простое решение с вложенными циклами или возвратом, но я не могу его найти.