Я интерпретирую этот вопрос как «как мне написать функцию, которую я могу дать [1,2] и 3, и получить обратно все комбинации этих элементов с такой длиной? Например (1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2), (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2) ".Вы можете сделать это с помощью itertools.product :
>>> import itertools
>>> list(itertools.product([1,2], repeat=3))
[(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2), (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2)]
Если по какой-либо причине вы не хотите импортировать модуль, чтобы выполнить это, в документации удобно представлена реализациядля этого требуются только встроенные функции:
def product(*args, repeat=1):
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
pools = [tuple(pool) for pool in args] * repeat
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)