import itertools
import re
inp = "?01?1"
for combination in itertools.product("01", repeat=inp.count("?")):
i_combination = iter(combination)
print(re.sub("\?",lambda m: next(i_combination),inp))
это просто использует встроенный itertools.product
для создания всех возможных строк "01" длины N (однако в строке есть много вопросительных знаков)
затем он преобразует каждый из них в итератор, где каждый элемент расходуется, как только его видят,
затем мы используем re.sub
, чтобы заменить наши продукты на наши оригинальные строки вместо наших вопросительных знаков
вот оно в реплее https://repl.it/@JoranBeasley/AssuredAncientOpengroup
Я вижу в комментарии здесь, что вы не хотите использовать встроенные функции ... так что не берите в голову, тогда я думаю
если вы не хотите использовать встроенный itertools.product ... Просто напишите свой собственный
def my_product(s,r):
if r < 1:
yield ""
for i in range(r):
for c in s:
for partial in my_product(s,r-1):
yield c+partial
то же самое со встроенным iter
def my_iter(s):
for c in s:
yield c
и, наконец, нам нужно написать собственный настраиваемый subber
def my_substitute(s,replacement):
iter_replacement = my_iter(replacement)
while s.count("?"):
s = s.replace("?",next(iter_replacement))
return s
теперь мы связываем все это вместе таким же образом
inp = "?01?1"
for combination in my_product("01", inp.count("?")):
print(my_substitute(inp,combination))