Все возможные комбинации трех массивов с учетом порядка

Имеется три массива:

good = [1/3, 1/3, 7/15, 3/7, 3/7, 7/15]
bad  = [2/3, 2/3, 1/15, 1/7, 1/7, 1/15]
middle = [0, 0, 7/15, 3/7, 3/7, 7/15]

Нужно вывести все возможные комбинации этих массивов с учетом порядка с указанием откуда взят элемент:

[1/3, 1/3, 7/15, 3/7, 3/7, 7/15] - [good, good, good, good, good, good]
[2/3, 1/3, 7/15, 3/7, 3/7, 7/15] - [bad, good, good, good, good, good]
[0, 1/3, 7/15, 3/7, 3/7, 7/15] - [middle, good, good, good, good, good]

Примерно как показано выше, при этом необходимо помнить, что мы можем ставить на первое место итоговой последовательности только любой из первых элементов исходных множеств, на второе - только второй элемент и т.д. Как это можно сделать средствами Python (может быть, с помощью itertools)? Спасибо!


Ответы (2 шт):

Автор решения: Кирилл Малышев
good = [1/3, 1/3, 7/15, 3/7, 3/7, 7/15]
bad  = [2/3, 2/3, 1/15, 1/7, 1/7, 1/15]
middle = [0, 0, 7/15, 3/7, 3/7, 7/15]
ll = [good, middle, bad]
names = ['good', 'middle', 'bad']
for i in range(3**6):
    l = []
    for j in range(6):
        r = i % 3
        l.append((ll[r][j], names[r]))
        i //= 3
    print(l)
→ Ссылка
Автор решения: extrn
import itertools

data = {
    'good': (1/3, 1/3, 7/15, 3/7, 3/7, 7/15),
    'bad': (2/3, 2/3, 1/15, 1/7, 1/7, 1/15),
    'middle': (0, 0, 7/15, 3/7, 3/7, 7/15),
}

rows = [[(x, name) for x in row] for name, row in data.items()]

for row in itertools.product(*zip(*rows)):
    print(*zip(*row))
(0.3333333333333333, 0.3333333333333333, 0.4666666666666667, 0.42857142857142855, 0.42857142857142855, 0.4666666666666667) ('good', 'good', 'good', 'good', 'good', 'good')
...
→ Ссылка