Перебрать все возможные варианты вставки точек

Нужно написать скрипт, который на вход принимает строку, на выход отдает массив строк со всеми возможными размещениями точек между букв Попробовал разные штучки из 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

tio.run

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']
→ Ссылка