各グループのR-組み合わせのデカルト積を取る:
from itertools import product, chain, combinations, permutations
groups = [[1,2,3],[4,5,6],[7,8,9]]
counts = (2, 2, 1)
selections = [combinations(g, c) for g, c in zip(groups, counts)]
for n_tuple in product(*selections):
print(tuple(chain.from_iterable(n_tuple)))
出力:
(1, 2, 4, 5, 7)
(1, 2, 4, 5, 8)
(1, 2, 4, 5, 9)
(1, 2, 4, 6, 7)
(1, 2, 4, 6, 8)
(1, 2, 4, 6, 9)
(1, 2, 5, 6, 7)
(1, 2, 5, 6, 8)
(1, 2, 5, 6, 9)
(1, 3, 4, 5, 7)
(1, 3, 4, 5, 8)
(1, 3, 4, 5, 9)
(1, 3, 4, 6, 7)
(1, 3, 4, 6, 8)
(1, 3, 4, 6, 9)
(1, 3, 5, 6, 7)
(1, 3, 5, 6, 8)
(1, 3, 5, 6, 9)
(2, 3, 4, 5, 7)
(2, 3, 4, 5, 8)
(2, 3, 4, 5, 9)
(2, 3, 4, 6, 7)
(2, 3, 4, 6, 8)
(2, 3, 4, 6, 9)
(2, 3, 5, 6, 7)
(2, 3, 5, 6, 8)
(2, 3, 5, 6, 9)
を各グループから選択するときには、例えば(combinations
場合permutations
に注文事項を変更することができます、(3, 2, 5, 6, 9)
が(2, 3, 5, 6, 9)
と異なる場合)。
choose(n, k)
がbinomial coefficientの場合は、N
個のグループからchoose(|g1|, c1) * choose(|g2|, c2) * ... * choose(|gN|, cN)
個の要素が生成されます。あなたのグループサイズがあなたの言うように数百になる場合、またはグループの数が多い場合には、これは膨大になります。
あなたは '[1、2]'、 '' [5,6] '、' [9] 'または' [1,2,5,6,9] 'の組み合わせを必要とします。 –
group1、group2 、およびgroup3にはすべて200個の要素がありますが、79202000000のようなものがあります。これは実現不可能であっても繰り返すことができません。実際に必要な質問をしていますか? – DSM