Похоже, ваша проблема связана с декартовым произведением. Обратите внимание, что размер результата (количество комбинаций) равен L1*L2*L3..*LM
, где Li
- количество вариантов выбора для ai
. Вы можете реализовать его с помощью рекурсии или использовать соответствующую библиотеку, если она доступна
Python пример:
import itertools
l = [['a', 'b'], [1, 2, 3], [False, True]]
print([list(a) for a in itertools.product(*l)])
>>> [['a', 1, False], ['a', 1, True], ['a', 2, False], ['a', 2, True],
['a', 3, False], ['a', 3, True], ['b', 1, False], ['b', 1, True],
['b', 2, False], ['b', 2, True], ['b', 3, False], ['b', 3, True]]
Пример рекурсивной и итеративной реализации:
def product_rec(a, fromindex, res):
if fromindex == len(a):
print(res)
return
for x in a[fromindex]:
product_rec(a, fromindex+1, res+[x])
def product_iter(a):
NN = 1
for x in a:
NN *= len(x) #number of combinations
b = [[0]*len(a) for i in range(NN)]
N = NN
M = 1
for k in range(len(a)):
N //= len(a[k])
c = 0
for l in range(M):
for i in range(len(a[k])):
for j in range(N):
b[c][k] = a[k][i]
c += 1
M *= len(a[k])
print(b)
l = [['a', 'b'], [1, 2, 3], [False, True]]
product_rec(l, 0, [])
product_iter(l)