Генератор всех строк с 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