Все возможные комбинации трех массивов с учетом порядка
Имеется три массива:
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')
...