Вы, кажется, задаете два отдельных вопроса. На основании ваших результатов:
000 001 011 111 101 100 010
Использование permutations_with_replacement комбинаторный через itertools.product
.
111 12 21 3
Использование разбиений алгоритм через more_itertools.partitions
.
Дано
import itertools as it
import more_itertools as mit
Код
# 1 - Permutation w Replacement
>>> list(it.product("01", repeat=3))
[('0', '0', '0'),
('0', '0', '1'),
('0', '1', '0'),
('0', '1', '1'),
('1', '0', '0'),
('1', '0', '1'),
('1', '1', '0'),
('1', '1', '1')]
# 2 - Partitions
>>> list(mit.partitions("111"))
[[['1', '1', '1']],
[['1'], ['1', '1']],
[['1', '1'], ['1']],
[['1'], ['1'], ['1']]]
Подробности
Для достижения конкретных результатов используйте списочные выражения:
# 1
>>> ["".join(x) for x in it.product("01", repeat=3)]
['000', '001', '010', '011', '100', '101', '110', '111']
# 2
>>> [[sum(map(int, x)) for x in sub] for sub in mit.partitions("111")]
[[3], [1, 2], [2, 1], [1, 1, 1]]
more_itertools
- сторонний пакет. Установить с > pip install more-itertools
.