Перебрать все возможные варианты вставки точек
Нужно написать скрипт, который на вход принимает строку, на выход отдает массив строк со всеми возможными размещениями точек между букв Попробовал разные штучки из itertools,но это все не то, что нужно, пример того что нужно:
abc
[ ‘abc’, ‘a.bc’, ‘ab.c’, ‘a.b.c’]
abcd
[ ‘abcd’, ‘a.bcd’, ‘ab.cd’, ‘a.b.cd’ … ]
то,что сейчас есть:
from itertools import permutations
my_string = "abc"
l = list(my_string)
l.append(".")
for i in permutations(l):
print(i)
Результат:
('a', 'b', 'c', '.')
('a', 'b', '.', 'c')
('a', 'c', 'b', '.')
('a', 'c', '.', 'b')
('a', '.', 'b', 'c')
('a', '.', 'c', 'b')
('b', 'a', 'c', '.')
('b', 'a', '.', 'c')
('b', 'c', 'a', '.')
('b', 'c', '.', 'a')
('b', '.', 'a', 'c')
('b', '.', 'c', 'a')
('c', 'a', 'b', '.')
('c', 'a', '.', 'b')
('c', 'b', 'a', '.')
('c', 'b', '.', 'a')
('c', '.', 'a', 'b')
('c', '.', 'b', 'a')
('.', 'a', 'b', 'c')
('.', 'a', 'c', 'b')
('.', 'b', 'a', 'c')
('.', 'b', 'c', 'a')
('.', 'c', 'a', 'b')
('.', 'c', 'b', 'a')
Ответы (2 шт):
Автор решения: EzikBro
→ Ссылка
Можно через itertools.product:
def func(s):
for p in itertools.product(['', '.'], repeat=len(s)-1):
t = s[0]
for i, j in zip(p, s[1:]):
t += i + j
yield t
list(func('abc'))
# ['abc', 'ab.c', 'a.bc', 'a.b.c']
Автор решения: Qwertiy
→ Ссылка
s = "abc"
res = ["".join(ch+"." if mask&(1<<i) else ch for i,ch in enumerate(s)) for mask in range(1<<len(s)-1)]
print(res)
['abc', 'a.bc', 'ab.c', 'a.b.c']