Генератор всех строк с n заменами

Как написать генератор, который принимает на вход строку, допустим abc и параметр n допустим n=1 и последовательно выдает все строки, которые получаются из этой заменой в n символов?

Для примера выше abc и алфавита abc с n=1, получаем такие строки: bbc, cbc, aac, acc, aba, abb.

P.S. Алфавит должен заранее задаваться в теле генератора, либо передаваться как параметр.


Ответы (3 шт):

Автор решения: Danis

вариант для n = 1

abc = 'abc'

def test(textl):
    text = list(text)
    arr = []
    
    for i in range(len(text)):
        for j in range(len(abc)):
            if text[i] != abc[j]:
                arr.append(text.copy())
                arr[-1][i] = abc[j]
    return arr
→ Ссылка
Автор решения: strawdog

Для n=1 (и, скорее всего, для строки с неповторяющимися символами):

a = "abc"
alphabet="abc"
print(*(a.replace(x,y) for x in alphabet for y in a if x!=y))

bbc cbc aac acc aba abb

→ Ссылка
Автор решения: n1tr0xs

Вот так вроде работает:

import itertools as it

def repl(text, alphabet='abc', n=1):
    swaps = list(it.combinations_with_replacement(range(len(text)), n))
    for letter in alphabet:
        for swap in swaps:
            text_copy = list(text)
            for idx in swap:
                text_copy[idx] = letter
            yield ''.join(text_copy)

for r in repl('AAA', alphabet='agct'):
    print(r, end=' ')

Вывод:

AAA AAA AAA GAA AGA AAG CAA ACA AAC TAA ATA AAT
→ Ссылка