Выделение перестановок алгоритма массива (списка) в python

Поэтому у меня возникли проблемы с решением следующей проблемы:

учитывая размер массива, скажем, для удобства вопроса размер = 20

он заполняется нулями следующим образом: arr = [0] * 20 ==> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

у нас есть пара постоянных размеров выборки, таких как 4,3,2

SampleA = 4, SampleB = 3, SampleC = 2

Мне нужно иметь перестановки / варианты того, как распределить список.

я могу поместить каждый образец в другое место / индекс

например, sampleA = 4, я могу поместить его в индексы 0: 3 или 1: 4 ... 15:19 .. (как вы видите, есть много возможностей)

вещь становится сложной, когда она становится более переполненной, например:

3 + 2 + 3 +4

[0, x, x, x, 0, 0, xx, 0, x, x, x, 0, 0, 0, x, x, x, x]

что мне в основном нужно, это найти все возможности для размещения образцов,

Я получаю словарь: key = примерный размер индексов, а значение = много раз повторяется.

для верхнего примера: {3: 2,2: 1,4: 1}

и я хотел бы, чтобы функция возвращала список индексов ! = 0

для этого примера: [0, x, x, x, 0, 0, xx, 0, x, x, x, 0, 0, 0, x, x, x, x]

функция вернется: list_ind = [0,5,6,9,13,14,15,16]

python,arrays,algorithm,itertools,

0

Ответов: 1


0 принят

поэтому я попросил коллегу помочь, и мы пришли к решению:

я приведу пример: 4: 2, 3: 1, 2: 1

или устно:

два раза 4, один раз 3, один раз 2 код ниже:

* если кто-то может оптимизировать, будет здорово

size_of_wagon = 20
dct = {4:2,3:1,2:1}
l = [item for sublist in [[k] * v for (k, v) in dct.items()] for item in sublist]


def gen_func(lstOfSamples, length, shift):
    try:
        # print(f'lstOfSamples={lstOfSamples}')
        sample = lstOfSamples[0]  # Take first sample
        for i in range(length - sample):
            for x in gen_func(lstOfSamples[1:], length - (sample + i), shift + sample + i):
                yield [(shift + i, sample)] + x
    except:
        yield []


g = list(gen_func(l, size_of_wagon, 0))

for i in g:
    print(i)
print(len(g))
питон, массивы, алгоритм, itertools,
Похожие вопросы
Яндекс.Метрика